vijos-p1133 2008.11.6
//一定不要代错变量
描述 Description
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。
输入格式 Input Format
第一行,一个整数,表示箱子容量;
第二行,一个整数,表示有n个物品;
接下来n行,分别表示这n个物品的各自体积。
输出格式 Output Format
一个整数,表示箱子剩余空间。
样例输入 Sample Input
24
6
8
3
12
7
9
7
样例输出 Sample Output
0
program p1133;
var a:array[1..30]of longint;
f:array[0..20000]of boolean;
n,v,i,j,k:longint;
f1,f2:text;
procedure init;
var i:longint;
begin
read(v,n);
fillchar(f,sizeof(f),false);
for i:=1 to n do
read(a[i]);
f[0]:=true;
end;
procedure dp;
var i,j:longint;
begin
for i:=1 to n do
for j:=v downto 0 do
if (j>=a[i]) then
f[j]:=f[j-a[i]]or f[j];//这里,刚开始,写成了 f[j]:=f[j-a[i]],忘了f[j]本身了,wa
for i:=v downto 0 do
if f[i] then
begin
write(v-i);
halt;
end;
end;
begin
init;
dp;
end.