描述
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入
每个测试文件只包含一组测试数据,每组输入的第一行为一个整数V(0<=V<=20000),表示箱子的容量。
第二行输入一个整数n(0<n<=30),表示有n个物品。
接下来n行,每行输入一个正整数,表示每个物品的体积。
输出
对于每组输入数据,输出一个整数,表示箱子剩余空间。
输入样例 1
24
6
8
3
12
7
9
7
输出样例 1
0
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int v,n;
cin>>v>>n;
int arr[n];
for(int i=1; i<=n; i++) cin>>arr[i];
int dp[v+1];
memset(dp,0,sizeof(dp));
for(int i=1; i<=n; i++)
{
for(int j=v; j>=arr[i]; j--)
{
dp[j]=max(dp[j],dp[j-arr[i]]+arr[i]);
}
}
cout<<v-dp[v]<<endl;
return 0;
}