程序员小白常犯的错误及规避之道
7 动态规划 动态规划通常简称DP(dynamic programming),如果按照问题类型来划分,将分为线性DP、区间DP,数位DP等等,每当说到动态规划就会想最优子结构,重叠子问题等等,这些词汇苦涩难懂,不要慌,再难的问题也是建立在基础问题上,逐步拆分,这也是动态规划的思想,相信通过下面动态规划四步走的方式,加上习题的练习,一定会让你对动态规划有个新的理解。 四个步骤分为:状态定义,状态转移方程,正确性的证明和实现
其实上面说递推的时候就已经有所涉及状态定义,通常在推导的过程中,如果感觉推不下去了,很有可能就是我们的状态定义出现了问题。 第一个状态:dp[i][j]代表从起始点到(I,j)路径的最大值 第二个状态:dp[i][j]代表从底边的某个点出发,到达(i,j)路径的最大值
上面的两种状态定义对应这里两个转移方向。 案例2 凑钱币问题 用 1 元、2 元、5 元、10 元、20 元、50 元和 100 元凑成 1000 元钱,总共有多少种方案
结论就比较清晰了:从第三个月开始,第n个月的兔子数量等于该月的成兔数量与幼兔数量之和,也就是等于第n-1个月的兔子数量与第n-2兔子数量之和。这种根据前面的数量来推后面的数量的情况叫做递推,那么递推算法套路通常是怎么样呢
我们根据三步走的方式来阐释解决兔子的这个问题
(编辑:南通站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |