讨论 / 这是怎么一回事???
陈星北2 2011-11-07 17:16:00
点我顶贴 收藏 删除
运行结果竟是:

测试结果1: 测试结果错误.错误结果为:1 8 13

MAX=69

正确结果应为:1 8 13

MAX=69

测试结果2: 测试结果错误.错误结果为:1 5 24 37

MAX=165

正确结果应为:1 5 24 37

MAX=165

测试结果3: 测试结果错误.错误结果为:1 10 26

MAX=146

正确结果应为:1 10 26

MAX=146

测试结果4: 测试结果错误.错误结果为:1 4 9 31 51

MAX=126

正确结果应为:1 4 9 31 51

MAX=126

测试结果5: 测试结果错误.错误结果为:1 3 11 18

MAX=44

正确结果应为:1 3 11 18

MAX=44

测试结果6: 测试结果错误.错误结果为:1 6 41 67

MAX=427

正确结果应为:1 6 41 67

MAX=427

测试结果7: 测试结果错误.错误结果为:1 2 5 8 11 12 13

MAX=26

正确结果应为:1 3 5 7 8 17 18

MAX=26

测试结果8: 测试结果错误.错误结果为:1 4 5 15 18 27 34

MAX=70

正确结果应为:1 4 5 15 18 27 34

MAX=70

测试结果9: 测试结果错误.错误结果为:1 2 3 4 5 6 7 8 9

MAX=9

正确结果应为:1 2 3 4 5 6 7 8 9

MAX=9

测试结果10: 测试结果错误.错误结果为:1

MAX=9

正确结果应为:1

MAX=9

我的程序是这样:

program ex;

var n,k:integer;max:longint;a,ans:array[1..40] of longint;

f:array[0..1600] of integer;

function dp(l:integer):longint;

var i,j:longint;

begin

f[0]:=0;

for i:=1 to l do f[a[i]]:=1;

j:=1;

while f[j]<=n do

begin

j:=j+1;

f[j]:=n+1;

for i:=1 to l do

if j>=a[i] then if f[j-a[i]]+1<f[j] then f[j]:=f[j-a[i]]+1;

end;

dp:=j;

end;

procedure try(l,m:longint);

var j,p:longint;z:array[1..1600,1..2] of integer;

begin

if l=k then begin if max<=m then begin ans:=a;max:=m end; end

else

begin

for j:=a[l]+1 to m+1 do

begin

a[l+1]:=j;

p:=dp(l+1);

try(l+1,p-1);

end;

end;

end;

begin

readln(n,k);

a[1]:=1;

max:=0;

try(1,n);

for n:=1 to k-1 do write(ans[n],' ');

writeln(ans[k]);

writeln('MAX=',max);

end.

#1 woshitanwei@2011-10-10 04:07:00
回复 删除
你是不是多打了空格
#2 kiki_yu@2011-11-07 17:16:00
回复 删除
额..我多打了空格..是对的

你没多打.....

查看更多回复
提交回复