📄 test.pas
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -