算法学习-背包问题
一、01背包问题
有N件物品和一个容量为V的背包。放入第i件物品花费的费用是c[i],得到的价值是w[i],求将哪些物品装入背包可使价值总和最大。
直接给出01背包问题的二维动态方程:
f[i][j]=max(f[i-1][j],f[j-c[i]]+w[i]);
怎么理解呢?
想象出一个二维数组f[0…N][0…V],其中f[i][j]表示前i个物品装入背包容量为j的方案中价值最大的。那么整个问题就可以规划成很多子问题,只需要抓住关键:
1、若第i个物品无法装入(即第i个物品的容量超过了背包容量),那么
原创
2022-01-12 00:47:50 ·
2545 阅读 ·
2 评论