题意:给一个容量为v的箱子,每个物品有一个对应体积,任选物品装入箱子,求箱子最小剩余容量
思路:取dp[i]为容量为i时所选的最大容量,即背包容量为v,价值为每个物品体积,求不超过v选取的最大体积,由于不超过v所以选的最大体积不会超过v,故答案即为v-dp[v]
#include<bits/stdc++.h>
using namespace std;
int n, v, a[35], dp[20005];
int main()
{
while (cin >> v) {
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < n; i++) {
for (int j = v; j >= a[i]; j--) {
dp[j] = max(dp[j], dp[j-a[i]]+a[i]);
}
}
cout << v-dp[v] << endl;
}
return 0;
}