c++ 装箱问题
装箱问题
Description
有一个箱子容量为V(正整数,0 ≤ V ≤ 20000),同时有n个物品(0 < n ≤ 30),每个物品有一个体积(正整数)。要求从n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
Input
输入有若干行。第一行:一个整数,表示箱子容量V;第二行:一个整数,表示物品个数n;接下来n行,分别表示这n个物品的各自体积。
Output
输出只有一行数据,该行只有一个数,表示最小的箱子剩余空间。
Sample Input
24
6
8
3
12
7
9
7
Sample Output
0
HINT
Source
#include <bits/stdc++.h>
using namespace std;
bool f[20001];
int n, a[31], v;
int main() {
cin >> v >> n;
for (int i = 1; i <= n; i ++) {
scanf("%d", &a[i]);
}
memset (f, 0, sizeof(f));
f[0] = 1;
for (int i = 1; i <= n; i ++) {
for (int j = v; j >= 0; j --) {
if (f[j] == 1 && j + a[i] <= v) {
f[j + a[i]] = 1;
}
}
}
int ans = 0;
for (int i = v; i >= 0; i --) {
if (f[i] == 1) {
ans = i;
break;
}
}
cout << v - ans << endl;
return 0;
}
/**************************************************************
Problem: 1603
User: LJA001162
Language: C++
Result: 正确
Time:0 ms
Memory:1556 kb
****************************************************************/