题目描述
有一个箱子容量为 VVV (正整数, 0≤V≤200000 \le V \le 200000≤V≤20000 ),同时有 nnn 个物品( 0<n≤300<n \le 300<n≤30 ,每个物品有一个体积(正整数)。
要求 nnn 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入输出格式
输入格式:111 个整数,表示箱子容量
111 个整数,表示有 nnn 个物品
接下来 nnn 行,分别表示这 nnn 个物品的各自体积
输出格式:111 个整数,表示箱子剩余空间。
输入输出样例
输入样例#1:
24 6 8 3 12 7 9 7
输出样例#1:
0
说明
NOIp2001普及组 第4题
01背包基础问题
W−dp[W] W − d p [ W ] 就是答案
#include<bits/stdc++.h>
using namespace std;
const int MAXN=20000+7;
int dp[MAXN];
int v[50],n,W;
int main()
{
while(~scanf("%d",&W))
{
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&v[i]);
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
for(int j=W;j>=v[i];j--)
dp[j]=max(dp[j],dp[j-v[i]]+v[i]);
printf("%d\n",W-dp[W]);
}
return 0;
}