【codevs2602】最优分解方案 dp+高精
var a:array[1..200] of longint; b:array[1..200] of longint; len1,len2:longint; n:longint; procedure inti; begin readln(n); end; procedure divi; var i:longint; begin len1:=1; while n>len1 do begin a[len1]:=len1+1; inc(len1); n:=n-len1; end; dec(len1); if n>0 then begin i:=len1; while n>0 do begin inc(a[i]); dec(n); dec(i); if i=0 then i:=len1; end; end; end; procedure mul; var i,j:longint; begin fillchar(b,sizeof(b),0); len2:=1;b[1]:=1; for i:=1 to len1 do begin for j:=1 to len2 do b[j]:=b[j]*a[i]; for j:=1 to len2+3 do begin b[j+1]:=b[j+1]+b[j] div 10; b[j]:=b[j] mod 10; end; len2:=len2+4; while b[len2]=0 do dec(len2); end; end; procedure print; var i:longint; begin for i:=len2 downto 1 do write(b[i]); end; begin inti; if n<5 then begin write(n-1);end else begin divi; mul; print; end; end.
喜欢就收藏一下,vic私人qq:1064864324,加我一起讨论问题,一起进步^-^