测试结果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.