w:array[1..30] of longint;
n,i,max,maxv:longint;
procedure put(i,v:longint);
begin
if (i>n) or (v+w[i]>maxv) then
begin
if v>max then max:=v;
exit;
end;
put(i+1,v);
put(i+1,v+w[i]);
end;
begin
max:=0;
readln(maxv);
readln(n);
for i:=1 to n do readln(w[i]);
put(1,0);
writeln(maxv-max);
end.
很奇怪,自己测都对,提交上去就错了!
请大家指点!!!!!
当然,如果v+w[i]没有大于maxv那就不行了。
要在单单判断v有没有大于max.
再加上一个砍枝,便可ac~~~~~~
var
a:array[1..10000] of longint;
i,j,v,n,max:longint;
begin
if he>v then exit;
if i>n then begin if (he+a[i]>max) or (he>max) then begin if (he<=v) and (he>max)
then max:=he;exit;end;end
Program b147;
Var
v,n,h:longint;
f:array[0..20010] of longint;
a,b:longint;
begin
readln(v);
readln(n);
for a:=1 to n do
begin
readln(h);
for b:=v downto h do
if f[b-h]+h>f[b] then f[b]:=f[b-h]+h;
end;
writeln(v-f[v]);
end.