常见题目类型
1.基础
2.背包问题
3.打家劫舍
4.股票问题
5.子序列问题
解题步骤
1.dp数组含义 下标含义 初始化
2.递推公式
3.遍历顺序
4.打印dp数组(debug)
题目
爬楼梯(基础)
1.dp[i]:达到第i阶台阶的方法数量
2.dp[i]=dp[i-2]+dp[i-1]+...(根据一次可跨的台阶数量不同而不同,以2阶为例)
3.初始化 dp[1]=1 dp[2]=2
4.正序遍历(否则倒序递归时间复杂度高)
消耗爬楼梯
1.dp[i]=到达i位置所花费的最小精力
2.min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1])
不同路径
1.二维dp数组 dp[i][j]:从起点到现在位置有多少不同的路径
2.dp[i][j]=dp[i-1][j]+dp[i][j-1]
3.初始化第一行第一列
不同路径(障碍)
1.二维dp数组 dp[i][j]:从起点到现在位置有多少不同的路径(障碍处=0)
2.dp[i][j]=dp[i-1][j]+dp[i][j-1]
3.初始化第一行第一列(有一个障碍则后面都为0)
整数拆分
1.dp[i]:对i进行拆分,使其拆分后的数乘积最大
2.dp[i]=j*dp[i-j] #for j in range(i) #取最大的
3.dp[1]=0 dp[2]=1