完全背包问题

  • 数据结构与算法
  • 算法
  • 动态规划
  • 背包问题

链接

https://www.acwing.com/problem/content/description/3/open in new window

题解

0-1背包的限制是,每件物品只能选一次 而完全背包的每个物品可以选无数次,直到背包装不下

只需对0-1背包的状态转移方程稍稍做个改变即可

0-1背包的状态转移方程: dp[i][j] = max( dp[i][j-v[i]]+w[i],dp[i-1][j]) 每次算最大价值时,只会减去一次物品的体积,加上一次物品的价值,相当于选了一次物品 这里需要改成选无数次,直到背包装不下

假设当前背包的容量为j,取某一件物品的的个数为k 那么

for(int k = 0; k*v[i] <= j; k++){
    dp[i][j] = max( dp[i][j-k*v[i]]+k*w[i],dp[i][j])
}
Loading...