貪心 最優分解問題

2021-09-29 18:44:57 字數 641 閱讀 6084

設n是乙個正整數,現要求將n分解為若干個互不相同的自然數的和,使這些自然數的乘積最大.

若a+b=n,則|a-b|越小,a*b就越大

當n<=4時,乘積4時,n=(n-a)+a, a>=2 && n<=n-a 此時乘積》n

貪心策略:把n分成從2開始的連續自然數,如果最後剩下乙個數均勻地分給前面各項

具體**如下:

#include#includeint a[1000];

int solve(int n)

for(int i=1; i<=k; i++)

printf("%d ",a[i]);

printf("\n");

/*如果n剩下的值等於a[k],那麼均勻分配前面則多1,所以a[k]再加1

比如n=19

分解成 2,3,4,5

剩下n=5

均勻分配給前面各項2+1,3+1,4+1,5+1,此時多1再新增再最後一項即可

*/if(n==a[k])

for(int i=0; ia[k-i]++;

for(int i=1; i<=k; i++)

sum*=a[i];

return sum;

}int main()

最優分解問題(C語言) 貪心策略

題目描述 設n是乙個正整數,現在要求將n分解為若干個互不相同的自然數的和,使這些自然數的乘積最大。解題思路 根據數學中和定近積大,積定近和小的原則,可得 1 若a b等於乙個常數,則 a b 越小,a b就越大。要使得加數互不相同,又盡可能集中,那加數只能是連續的自然數了。2 乙個數能分解,分解後乘...

最優分解問題

題目描述 設n是乙個正整數,現在要求將n分解為若干個互不相同的自然數的和,使這些自然數的乘積最大。輸入輸入乙個n n 100 輸出輸出最大的乘積 樣例輸入 1樣例輸出 1如果不理解思路,代入資料算一下就明白了 1的結果是1,2的結果是2,3的結果是3 include includeusing nam...

3 2 最優分解問題

利用貪心演算法解決最優分解問題 將正整數n分成若干互不相同的自然數和,且使得自然數的乘積最大。小學時候學過,周長相同的正方形面積要大於長方形面積。這意味著 在總和相同的情況下,自然數間越接近,乘積越大。本道題可以用這樣的思路去解。要想使自然數的乘積最大 todo 獲取基本因數 def getinde...