8785:装箱问题
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
有一个箱子容量为V(正整数,0<=v<=20000),同时有n个物品(0< n<n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入
-
第一行是一个整数V,表示箱子容量。
第二行是一个整数n,表示物品数。
接下来n行,每行一个正整数(不超过10000),分别表示这n个物品的各自体积。
输出
- 一个整数,表示箱子剩余空间。 样例输入
-
24 6 8 3 12 7 9 7
样例输出
-
0
来源
NOIP2001复赛 普及组 第四题
代码:
#include<cstdio>
#include<cstring>
int n,v,a[35],d[20005];
inline int max(int a,int b){return a>b?a:b;}
int main(){
scanf("%d%d",&v,&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
for(int j=v;j>=a[i];j--)
d[j]=max(d[j],d[j-a[i]]+a[i]);
}
printf("%d\n",v-d[v]);
}