解題報告 整數劃分

2022-06-04 02:24:08 字數 2015 閱讀 9045

整數劃分(sum.pas/c/cpp)

【題目描述】

從檔案中讀入乙個正整數n(10≤n≤31 000)。要求將n寫成若干個正整數之和,並且使這些正整數的乘積最大。 例如,n=13,則當n表示為4+3+3+3(或2+2+3+3+3)時,乘積=108為最大。 

【輸入格式】(sum.in):

乙個整數,n

【輸出格式】(sum.out):

【輸入樣例】

13【輸出樣例】

3108

呃,話說這是乙個很經典的規律: 3 

越多越好,如果剩下了 

1 ,就與最後乙個 

3 拼成 

4 ,如果剩下了 

2 ,就直接 

*2 。。。。。。。

然後,就是高精了。

**(suemiller

)program acrush;

type arr=array[0..6000]of longint;

var n,nn:longint;

i,j,k,l,r,mid,ll,rr:longint;

ans:arr;

procedure mul(b:longint);

var i:integer;

begin

for i:=1 to ans[0] do

ans[i]:=ans[i]*b;

for i:=1 to ans[0] do

begin

ans[i+1]:=ans[i] div 10+ans[i+1];

ans[i]:=ans[i] mod 10;

end;

while ans[ans[0]+1]>0 do

begin

inc(ans[0]);

ans[ans[0]+1]:=ans[ans[0]] div 10;

ans[ans[0]]:=ans[ans[0]] mod 10;

end;

end;

begin

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

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

readln(n);

ll:=0;rr:=0;

l:=2;r:=n>>1;

i:=n div 3;

fillchar(ans,sizeof(ans),0);

ans[1]:=1;

ans[0]:=1;

if n mod 3=0 then

begin

k:=3;

for j:=1 to i do

mul(k);

endelse begin

nn:=n-n div 3*3;

for j:=1 to i-1 do

begin

mul(3);

end;

if nn=2 then

begin

mul(3);

mul(nn);

endelse begin

mul(4);

end;

//        for j:=1 to i do write(d[j],' ');

//        writeln;

//        for j:=ans[0] downto 1 do write(ans[j]);

//        writeln;

end;

writeln(ans[0]);

if ans[0]>100 then

begin

for i:=ans[0] downto ans[0]-100+1 do

write(ans[i]);

writeln;

endelse begin

for i:=ans[0] downto 1 do

write(ans[i]);

writeln;

end;

close(input);close(output);

end.

整數劃分解題報告(DP方法)

1.問題描述 給定乙個正整數n和k 1.將n劃分成若干正整數之和的劃分數。2.將n劃分成k個正整數之和的劃分數。3.將n劃分成最大數不超過k的劃分數。4.將n劃分成若干奇正整數之和的劃分數。5.將n劃分成若干不同整數之和的劃分數。2.問題分類 總的來說這些都是揹包問題 第乙個問 就是乙個完全揹包,揹...

最大整數 解題報告

測試可見洛谷p1107 最大整數 noip1998 問題描述 設有n個正整數 n 20 將它們聯接成一排,組成乙個最大的多位整數。例如 n 3時,3個整數13,312,343聯接成的最大整數為 34331213 又如 n 4時,4個整數7,13,4,246聯接成的最大整數為 7424613 輸入格式...

NOI2017 整數 解題報告

有一些比較簡單的 log 2n 做法 比如暴力在動態開點線段樹上維護每個位置為 0 還是 1 我們發現涉及到某一位加上 1 或者減去 1 實際上對其他位的影響只有區間覆蓋,通過線段樹上二分可以得到區間覆蓋的位置,然後暴力區間覆蓋即可。反正我這種菜雞大常數寫法只得到了68分.考慮利用勢能,注意到如果同...