思路
这个题目其实只要把 0 1背包中的每个物品的价值改成每个物品的重量就可以了。
总结
我们在进行动态规划的时候假如要涉及某个变量,如这个题目中的体积那么就把体积这个变量加方程里面就可以了。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 35;
int v; //箱子的容量
int n; //物品的个数
int w[N]; //物品各自的体积
int dp[20005];
int main(int argc, char const *argv[]) {
scanf("%d", &v);
scanf("%d", &n);
for (register int i = 1; i <= n; ++i)
scanf("%d", &w[i]);
for (register int i = 1; i <= n; ++i) {
for (register int j = v; j >= 0; --j) {
if (j >= w[i])
dp[j] = max(dp[j], dp[j - w[i]] + w[i]);
}
}
printf("%d\n", v - dp[v]);
return 0;
}
网友评论