【算法心得】动态规划不是教条的列表求值,表只是工具

https://leetcode.cn/problems/maximum-subarray/description/

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
这个题是一维的,状态转移方程着眼于,是否要将当前的点作为子数组的起始点

https://leetcode.cn/problems/minimum-falling-path-sum/description/
这个题是二维的,着眼于从哪个方向(左上,上,右上)下来值最小

刚开始有点教条的思维,认为dp[i][j]的值,是[0][0]到[i][j]这一块的问题的解;而问题最终的答案,就是dp[n-1][n-1]
这样就会出现一些问题,[0][0]到[i][j]的最优解未必是选择[i][j]的,这样就需要把dp数组再加一维,来存 or 不取的解
结果实际编码的过程中,发现不取状态的那块的值,是完全不需要的:不取依赖不取,而只依赖更新。最后要看要求的,只有状态的值
这个时候才舍弃了

dp数组的含义,未必是问题的解,只要能有助于求出问题的解即可

问题的答案,未必是dp[n-1][n-1],也可能是需要遍历dp数组来求得的

你可能感兴趣的:(动态规划,算法)