P1133装箱问题
裸的01背包,唯一的变化就是此题的花费和价值都是指的体积v[i]
状态转移方程:f[j] = max{f[j], f[j-v[i]] + v[i]};
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
using namespace std;
//f[j] = max{f[j], f[j-v[i]] + v[i]}
const int N = 40;
const int T = 20000+10;
int f[T];//f[j] j容量时最大体积
int v[N];
int main()
{
int V, n;
int i, j;
scanf("%d%d", &V, &n);
for(i = 1; i <= n; i++)
scanf("%d", &v[i]);
for(i = 1; i <= n; i++)
for(j = V; j >= v[i]; j--)
f[j] = max(f[j], f[j-v[i]] + v[i]);
printf("%d", V-f[V]);
return 0;
}