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 + -
显示快捷键?