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個整數,其中每個數的絕對值小...