<aside> 💡

动规五部曲:

  1. 明确DP数组与其下标的含义
  2. 确定递推公式
  3. 确定DP数组初始化方式
  4. 确定遍历顺序
  5. 打印DP数组进行debug </aside>

0-1背包理论基础

基础

DP数组与其下标的含义

dp[i][j]

value[i]

weight[i]

递推公式

分类:是否要放入下标为i的物品:

递推取两者较大值:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j – weight[i]] + value[i])

DP数组初始化

dp[i][j]由其上方格子和左上方范围内某一个格子初始化而来,所以需要初始化最上的一行最左的一列

遍历顺序

先遍历物品(i)或先遍历背包(j)都可以,都能将dp数组填满

滚动数组优化