算法入门笔记:背包dp
//01背包
void ZeroOnePack(int v, int w, int m) {
//v为当前物品的容量 m为给定最大的容量 w为当前物品的价值
for (int i = m; i >= v; i--) {
dp[i] = max(dp[i], dp[i - v] + w);
}
}
//完全背包
void CompletePack(int v, int w, int m) {
//v为当前物品的容量 m为给定最大的容量 w为当前物品的价值
for (int i = v; i <= m; i++) {
dp[i] = max(dp[i], dp[i - v] + w);
}
}
//多重背包
void MultiPack(int v, int w, int m, int c) {
//v为当前物品的容量 m为给定的最大容量 w为当前物品的价值 c为剩余物品的数量
if (v * c >= m) {
CompletePack(v, w, m);
}
else {
int k = 1;
while (k