Description
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。
Input
第一行,一个整数,表示箱子容量;
第二行,一个整数,表示有n个物品;
接下来n行,分别表示这n个物品的各自体积。
Output
一个整数,表示箱子剩余空间。
Sample Input
24
6
8
3
12
7
9
7
Sample Output
0
填满型背包之模板
#include <iostream>
#define SIZE 100001
#define NUM 5001
using namespace std;
int res[SIZE], v[NUM], c[NUM];
int main(int argc, char** argv)
{
int t, n, i, j;
cin >> t >> n;
for (i = 1; i <= n; i++)
{
cin >> c[i];
v[i] = c[i]; // 价值等于体积
}
for (i = 1; i <= n; i++)
{
for (j = t; j >= v[i]; j--)
{
if (res[j] < res[j-v[i]] + c[i]) // 背包动态规划模板
{
res[j] = res[j-v[i]] + c[i];
}
}
}
cout << t - res[t] << endl;
return 0;
}