洛谷 P1047 装箱问题——————01背包
原创
©著作权归作者所有:来自51CTO博客作者mb634e5c39919de的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述
有一个箱子容量为 (正整数, ),同时有 个物品( ,每个物品有一个体积(正整数)。
要求 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入输出格式
输入格式:
个整数,表示箱子容量
个整数,表示有 个物品
接下来 行,分别表示这 个物品的各自体积
输出格式:
个整数,表示箱子剩余空间。
输入输出样例
输入样例#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;
}