美文网首页
最简单的动态规划题

最简单的动态规划题

作者: 拔丝圣代 | 来源:发表于2021-03-21 00:00 被阅读0次

动态规划关键是找状态转移方程,也就是递推关系,这里列出的四道题,都是最简单的递推,一定要熟练掌握。

题目1: 上台阶

n级台阶,一次可以上1级或2级,问一共有几种上法?

解法

n级台阶的上法 设为f(n) 根据第一步的不同分两类:
第一步上1级,一共有f(n-1)种上法
第一步上2级,一共有f(n-2)种上法
所以n级的上法f(n) = f(n-1) + f(n-2),也就是斐波那契数列。

题目2: house robber

一排n个房子,v(n)代表第n个房子中的财宝。不能取相邻两个房子的财宝,问最多能取多少?

解法

前n个房子的最大收益 f(n) 分两种情况:
如果取第n个房子,则最大收益为v(n) + f(k-2)
如果不取第n个房子,则最大收益为 f(n-1)
因此前n个房子的最大收益为两者最大值 f(n) = max[ f(n-1), v(n) + f(n-2) ]

题目3: 求数组的最大连续子数组和

解法:

对于数组前k个元素,包含最后一个元素的最大连续子数组和为m(k),则m(1) 到m(n)中的最大值即为所求。
怎么求m(k)? 分两种情况,包含前k-1个,和不包含前k-1个
m(k) = nums[k] + max(0, m(k-1))

func maxSubArray(nums []int) int {
    for i, num := range nums {
        if i == 0 {
            continue
        }
        nums[i] = num + max([]int{0, nums[i-1]})
    }
    return max(nums) // max函数自己实现
}

题目4: 股票最多买一次卖一次,最大利润是多少?

解法

前n天的最大利润分两种情况:
第n天卖,则最大利润为第n天的价格 - 前n-1天的最小值
第n天不卖,则最大利润为前n-1天的最大利润
f(n) = max{f(n-1), price(n) - min(n-1)}

相关文章

  • 最简单的动态规划题

    动态规划关键是找状态转移方程,也就是递推关系,这里列出的四道题,都是最简单的递推,一定要熟练掌握。 题目1: 上台...

  • 动态规划简单题总结

    感觉就分几种类型: 第1种:连续求和类型(只用dp[i-1]) 题目:53. 最大子序和 给定一个整数数组 num...

  • 1995. 统计特殊四元组

    虽然标记为简单题,但很难顶!!map,需要注意遍历的顺序!!!!! 动态规划

  • 面试常见算法——爬楼梯

    又到了每周的算法时间了,今天给大家带来一道很经典,又很简单,又比较适合对动态规划极度恐惧的童鞋,做动态规划的题,一...

  • 动态规划之数列的最大和

    Super Jumping! Jumping! Jumping!该题作为动态规划的讲解例子,首先需要明白动态规划问...

  • [LeetCode] 64. Minimum Path Sum

    原题 简单动态规划重点是:grid[i][j] += min(grid[i][j - 1], grid[i - 1...

  • 编辑距离 Edit Distance

    简介请点击leetcode 这里 这道题是动态规划。动态规划的核心思想是缓存。解决动态规划的主要方法是,找出状态转...

  • leetcode 413 找数组中等差数列的个数

    这题是放到动态规划的题型里了。但是根本不用动态规划做。 这题的关键是: 至少3个元素 必须是相邻的 (这个条件让题...

  • LeetCode-Climbing Stairs

    简单的动态规划问题:

  • ARTS 打卡 2

    Algorithm Leetcode 70,简单简单题都动态规划了么?隐约感觉做过,再做一遍吧 一开始使用递归,报...

网友评论

      本文标题:最简单的动态规划题

      本文链接:https://www.haomeiwen.com/subject/kiwgcltx.html