test.pas.bak
来自「www.vijos.cn上一些习题的参考源码」· BAK 代码 · 共 19 行
BAK
19 行
program siweia; var a,ans:array[1..10]of longint; b:array[0..10000]of
boolean; s:array[0..10000]of longint; max,i,j,n,m:longint;
procedure dfs(num,first,sum:longint); var i,j,k,maxs,sss,last:longint;
begin if num=m+1 then if max<sum then begin max:=sum;ans:=a;end;
fillchar(b,sizeof(b),0); fillchar(s,sizeof(s),0); b[0]:=true;
maxs:=0; sss:=0; s[0]:=0; for i:=1 to num-1 do begin
for j:=maxs downto 0 do if b[j] then begin
for k:=1 to n-s[j] do begin
b[j+a[i]*k]:=true; if (s[j+a[i]*k]=0) or
(s[j]+k<s[j+a[i]*k]) then s[j+a[i]*k]:=s[j]+k; end;
if j+a[i]*k>sss then sss:=j+a[i]*k; end;
maxs:=sss; end; for last:=1 to maxs do if not b[last] then
break; if last<>maxs then last:=last-1; if s[last]<n then
inc(last); if num=m+1 then begin if last>=max then begin
max:=last;ans:=a;end; exit;end; for i:=first+1 to last+1 do
begin a[num]:=i;dfs(num+1,i,last-1);end; end; begin readln(n,m);
a[1]:=1; dfs(2,1,n); for i:=1 to m do write(ans[i],' ');writeln;
writeln('MAX=',max); end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?