nbuoj 1587 最大乘積

2021-09-24 23:35:45 字數 1056 閱讀 8061

description

乙個正整數一般可以分為幾個互不相同的自然數的和,如3=1+2,4=1+3,5=1+4=2+3,6=1+5=2+4,。。。。

現在你的任務是將指定的正整數n分解成互不相同的自然數和,且使這些自然數的乘積最大。

input

只乙個正整數n,(3<=n<=10 000)。

output

第一行是分解的方案,相鄰兩數用乙個空格分開,並且按從小到大的順序。

第二行是最大的乘積。

sample input

10sample output

2 3 5

30思路:由於需要將乙個正整數n拆分成 幾個互不相同的自然數,因此我們可以想到等差數列,假設前m項等差數列和為sum,sum<=n;第m+1項為x;x+sum>n。

那麼,x怎麼辦呢?

假設,我有兩個常數a,b。對於x如何分,才能使得乘積最大。可以列這樣的乙個式子:(a+x1)*(b+x2)。(x1+x2=x)那麼只有當x1==x2的時候乘積最大。

因此,我們可以將x均分給m項的等差數列,此時得到的乘積最大。

#include

using

namespace std;

int a[

1100];

string mul

(string a,

int b)

while

(ok)

return c;

}int

main()

for(

int i=

2;sum+i<=n;i++

)int x=n-sum,y=x/cnt,z=x%cnt;

for(

int i=cnt-

1;i>=

0;i--

)for

(int i=

0;i) string s1;

s1+='1'

;for

(int i=

0;i) cout

}

DFS BFS 最大乘積

今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度n的數字串,要求選手使用k個乘號將它分成k...

WinterEx 最大乘積

時間限制 1 sec 記憶體限制 128 mb 乙個正整數一般可以分為幾個互不相同的自然數的和,如3 1 2,4 1 3,5 1 4 2 3,6 1 5 2 4,現在你的任務是將指定的正整數n分解成若干個互不相同的自然數的和,且使這些自然數的乘積最大。只乙個正整數n,3 n 10000 第一行是分解...

YTU OJ 最大乘積

時間限制 1 sec 記憶體限制 128 mb 提交 292 解決 39 提交 狀態 討論版 命題人 acm4302 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?第一行乙個數 代表資料組數 每組資料共兩行 第一行兩個正整數n m,n,m 20 第二行給出n個整數,其中每個數的絕對值小...