洛谷P1049: 装箱问题
https://www.luogu.org/problemnew/show/P1049
题目描述
有一个箱子容量为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题
可以搜索,也可以用背包思想来做,把每个物品的价值当做体积,求能装下的物品的体积最大。
#include<stdio.h>
#define N 20020
int dp[N];
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
int main()
{
int a,m,n,i,j;
scanf("%d%d",&m,&n);
for(i=0;i<n;i++)
{
scanf("%d",&a);
for(j=m;j>=a;j--)
dp[j]=max(dp[j],dp[j-a]+a);
}
printf("%d\n",m-dp[m]);
return 0;
}