讨论 / pascal代码90分 有简短代码 QQ:2637453212
g++ 2016-04-12 05:44:15
点我顶贴 收藏 删除
var

ans,a,b:array[1..1000]of longint;

m,n,max:integer;

function conti(p:integer):integer;

var

time:integer;

i,k:integer;

begin

for i:=1 to 1000 do

b[i]:=maxlongint;

for i:=1 to p do b[a[i]]:=1;

time:=0;

repeat

inc(time);

for k:=1 to p do

if (time>a[k])and(b[time-a[k]]+1<b[time]) then

b[time]:=b[time-a[k]]+1;

until b[time]>m;

conti:=time;

end;

procedure search(i:integer);

var

j,k:integer;

begin

if i>n then begin

if conti(i-1)-1>max then

begin

max:=conti(i-1)-1;

for i:=1 to 10 do

ans[i]:=a[i];

end;

exit;

end

else begin

j:=conti(i-1);

for k:=j downto a[i-1]+1 do

begin

a[i]:=k;

search(i+1);

end;

end;

end;

procedure print;

var

i:integer;

begin

for i:=1 to 10 do

if ans[i]<>0 then write(ans[i],' ')

else break;

writeln;

writeln('MAX=',max);

end;

begin

assign(input,'in.txt');reset(input);

assign(output,'out.txt');rewrite(output);

readln(m,n);

a[1]:=1;

search(2);

print;

end.

查看更多回复
提交回复