基础:斐波那契数列,爬楼梯
背包: 0-1背包,完全背包
打家劫舍
股票
子序列
dp数组的定义和下标的意义--------dp[][], dp[]
递推公式
dp数组如何初始化
遍历顺序
0-1 背包: n种物品,每种物品只有1个
完全 背包: n种物品,每种物品有无限个
0-1背包:
重量 | 价值 | |
物品0 | 1 | 15 |
物品1 | 3 | 20 |
物品2 | 4 | 30 |
背包重量为4,装满最大价值是多少
一维dp数组
dp[ i ][ j ] ----选择[ 0, i ]的任意物品,放入容量为 j 的背包 得到的最大价值
dp[ i ][ j ] = 不放物品i: dp[ i - 1 ] [ j ]
放物品i :dp[ i - 1 ][ j - weight[ i ]] + value[ i ]
dp[ i ][ j ] = max( dp[ i - 1 ] [ j ] , dp[ i - 1 ][ j - weight[ i ]] + value[ i ] )
一维dp数组
dp[ j ] ----容量为 j 的背包 能装的最大价值
dp[ j ] = max( dp [ j ] , dp[ j - weight[ i ]] + value[ i ] )
初始化:全0 dp[0] = 0
遍历: 先物品后背包,背包倒序