讨论 / 奇怪,总是只有60分!
zsw2 2010-11-04 21:57:00
点我顶贴 收藏 删除
Var

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.

很奇怪,自己测都对,提交上去就错了!

请大家指点!!!!!

#1 lxl@2010-07-25 14:53:00
回复 删除
回复 楼主zsw2 的帖子

当然,如果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

#2 lxl@2010-07-25 14:53:00
回复 删除
注明:片段

此为procedure的片段,请勿抄袭!!

#3 乖的古灵猫@2010-11-04 21:57:00
回复 删除
这样写就可以AC了

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.

查看更多回复
提交回复