动态规划(DP)
解决 最值问题、方案数问题、可行性问题
第一步:设动态规划数组(确定状态表示)
dp[i]: 第 i 步的方案数是多少 / 走到第 i 步的最大 / 小花费是多少
dp[i][j]: 走到第 i 行第 j 列的方案数 / 最大值 / 最小值
第二步:写出状态转移方程(递推式)
方案数 dp[i] = dp[i-1] + dp[i-2] + dp[i-3] + ... + dp[i-k];
最大值 dp[i] = max(dp[i-1], dp[i-2]+a[i]);
最小值 dp[i] = min(dp[i-1], dp[i-2]+a[i]);
第三步:初始化
dp[1] dp[2] dp[3]
最小值
for(int i=1;i<=n;i++) dp[i]=1e9;
memset(dp,0x3f,sizeof(dp)) // 把数组中所有的值赋值成某一个数字
dp[1]=0;
第四步:求出答案
dp[n]
dp[n][m]