动态规划(DP)
可以解决的问题:
1. 最值问题
2. 方案数问题
3. 可行性问题
第一步:设动态规划数组(确定状态表示)
DP[I]: 第 I 步的方案数是多少 / 走到第 I 步的最大 / 小花费是多少
DP[I][J]: 走到第 I 行第 J 列的方案数 / 最大值 / 最小值
第二步:写出状态转移方程(递推式)
方案数:
dpi=dpi−1+dpi−2+dpi−3+...+dpi−kdp_i = dp_{i-1}+dp_{i-2} + dp_{i-3} + ... + dp_{i-k} dpi =dpi−1 +dpi−2 +dpi−3 +...+dpi−k
最大值:
dpi=max(dpi−1,dpi−2+ai)dp_i = max(dp_{i-1}, dp_{i-2}+a_i) dpi =max(dpi−1 ,dpi−2 +ai )
最小值:
dpi=min(dpi−1,dpi−2+ai)dp_i = min(dp_{i-1}, dp_{i-2}+a_i) dpi =min(dpi−1 ,dpi−2 +ai )
第三步:初始化
确定dp[1]是多少就差不多了
求最小值
第四步:求出答案
dp[n]
dp[n][m]