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

2021-09-24 16:40:01 字數 527 閱讀 4008

題目描述

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

解題思路

根據數學中和定近積大,積定近和小的原則,可得

1、若a+b等於乙個常數,則|a-b|越小,a*b就越大。要使得加數互不相同,又盡可能集中,那加數只能是連續的自然數了。

2、乙個數能分解,分解後乘積會比之前更大。

具體**實現

#include #define max 100 

int main()

int num=index-1;

//將餘量加入從後向前分成1加入陣列

while(n)

//計算最大乘積

int result=1;

for(int i=0;iprintf("\n\n最大乘積為:%d\n",result);

return 0;

}

貪心 最優分解問題

設n是乙個正整數,現要求將n分解為若干個互不相同的自然數的和,使這些自然數的乘積最大.若a b n,則 a b 越小,a b就越大 當n 4時,乘積4時,n n a a,a 2 n n a 此時乘積 n 貪心策略 把n分成從2開始的連續自然數,如果最後剩下乙個數均勻地分給前面各項 具體 如下 inc...

最優分解問題

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

C 最優合併問題(貪心)

time limit 1000 ms memory limit 65536 kib submit statistic problem description 給定k 個排好序的序列s1 s2,sk 用2 路合併演算法將這k 個序列合併成乙個序列。假設所採用的2 路合併演算法合併2 個長度分別為m和n...