⚠️ 全是负数的时候

⚠️ 全是负数的时候

数组是 [-3, -1, -4],全都是负数。一边把 best 初始化成第一个元素,一边初始化成 0。运行下面这段程序: def max_sub(a): best = a[0] cur

阅读更多 →
⚠️ 最大子段和把答案初始化成 0

⚠️ 最大子段和把答案初始化成 0

写最大子段和时把 best 初始化成 0,问题在于【0】。

阅读更多 →
爬楼梯的 dp[0] 该设成多少

爬楼梯的 dp[0] 该设成多少

爬楼梯问题里 dp[0] 应该设成【0】。

阅读更多 →
base case 设错了会怎样

base case 设错了会怎样

dp 表的初始值设错了,后果是【0】。

阅读更多 →
⚠️ 两个转移方程写在一起

⚠️ 两个转移方程写在一起

把打家劫舍和最大子段和都写出来,把两个答案拼起来输出(打家劫舍在前)。 写完对照一下两个转移方程——它们的形状几乎一样。

阅读更多 →
写最大子段和

写最大子段和

补全 max_sub:cur 是以当前这个数结尾的最大和,best 一路记住最大的那个。

阅读更多 →
写打家劫舍

写打家劫舍

补全 rob:返回整张 dp 表,dp[i] 是前 i 家能拿到的最多钱。输出最后一项。

阅读更多 →
最大子段和的表长什么样

最大子段和的表长什么样

dp[i] 表示以第 i 个数结尾的最大连续和。运行下面这段程序: def max_sub_tab(a): dp = [a[0]] for x in a[1:]: dp

阅读更多 →
打家劫舍的表长什么样

打家劫舍的表长什么样

沿街五户人家钱数是 [2, 7, 9, 3, 1],相邻两家不能都偷。dp[i] 表示前 i 家最多能拿多少。运行下面这段程序: def rob(a): dp = [0] * (len(a)

阅读更多 →
定状态时最要紧的一条

定状态时最要紧的一条

状态定得对不对,最要紧的一条是【0】。

阅读更多 →