题解 P1049 【装箱问题】
program zhuangxiang2;
var
num,i,rongliang,minleft:longint;
v:array[0..30] of longint;
procedure digui(k,left:longint);
begin
if k>num then begin
if left<minleft then begin
minleft:=left;
end;
exit;
end;
digui(k+1,left);
if v[k]<=left then
digui(k+1,left-v[k]);
end;
begin
readln(rongliang);
readln(num);
for i:=1 to num do
read(v[i]);
minleft:=maxlongint;
digui(1,rongliang);
writeln(minleft);
readln;
readln;
end.
话说大家似乎都用动规?完全没必要...... n层递归,每一层两种情况,表示放或不放第k种物品
加限制条件,可AC!