下家工作单位依然遥遥无期,还是低头刷题吧,算法编程题还是看得我一脸懵,祈祷上帝赐我聪明智慧呀。
一、完全背包理论基础
有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。
完全背包和01背包的不同之处在于,物品可以放无限次,不像是01背包物品只能使用一次。
01背包的核心代码:
for(int i = 0; i < weight.size(); i++) { // 遍历物品
for(int j = bagWeight; j >= weight[i]; j--) { // 遍历背包容量
dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
}
}
因为完全背包的物品可以放无限次,所以内嵌循环可以调整一下,调整成从小到大去遍历:
// 先遍历物品,再遍历背包
for(int i = 0; i < weight.size(); i++) { // 遍历物品
for(int j = weight[i]; j <&