2011-06-14 20:49:45Morris
d862. NOIP2001 4.装箱问题
http://zerojudge.tw/ShowProblem?problemid=d862
內容 :
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30=,每个物品有一个体积(正整数)。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
輸入說明
:
第一行一个整数,表示箱子容量;
第二行一个整数,表示有n个物品;
接下来n行,分别表示这n 个物品的各自体积。
輸出說明
:
一个整数,表示箱子剩余空间。
範例輸入 :
24 6 8 3 12 7 9 7
範例輸出 :
0
提示
:
出處
:
/**********************************************************************************/
/* Problem: d862 "NOIP2001 4.装箱问题" from NOIP2001普及组第四题 */
/* Language: C */
/* Result: AC (2ms, 338KB) on ZeroJudge */
/* Author: morris1028 at 2011-06-11 09:46:59 */
/**********************************************************************************/
#include<stdio.h>
main() {
int V, n, x;
while(scanf("%d %d", &V, &n) == 2) {
int DP[20001] = {}, a, max = 0;
while(n--) {
scanf("%d", &x);
for(a = V-x; a >= 0; a--)
if(DP[a+x] <= DP[a] + x)
DP[a+x] = DP[a] + x;
}
for(a = 0; a <= V; a++)
max = (max > DP[a]) ? max : DP[a];
printf("%d\n", V-max);
}
return 0;
}