劍指offer 剪繩子問題

2021-10-08 13:54:21 字數 761 閱讀 8213

給你一根長度為n的繩子,請把繩子剪成整數長的m段(m、n都是整數,n>1並且m>1,m<=n),每段繩子的長度記為k[1],...,k[m]。請問k[1]x...xk[m]可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。

輸入乙個數n,意義見題面。(2 <= n <= 60)
輸出答案。
示例1

複製

8
複製

18
題解:我們只關心最大乘積,而不關心具體將繩子減為幾段。當1=4時,我們假設將繩子分為兩段(這兩段可以再次往下分,也可以不分)我們想得到這兩段繩子的最大乘積,就表示希望這兩個繩子現在的結果越大越好的dp[i]=max(最大乘積,繩子的長度),dp[n-i]=max(最大乘積,繩子的長度),dp[n]=max(dp[i]*dp[n-i]) i<=n/2

#include #include #include using namespace std;

int main()else if(n<=3)

vectordp(n+1,0);

dp[1] = 1; dp[2] = 2; dp[3] = 3;//當n<4是儲存不切割時的數,

//當n>4時儲存n切割成兩部分得到的最大值(這兩部分可以在切割,也可以不切割

//我們不在意他具體切割成幾段。

for(int i=4;i=n/2;j--)

}dp[i]=temp;

}cout<}

劍指offer 剪繩子問題

給你一根長度為n的繩子,請把繩子剪成整數長的m段 m n都是整數,n 1並且m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 xk 1 x xk m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。用貪心和動態規劃兩種方法...

劍指Offer 剪繩子 和剪繩子

劍指offer 剪繩子 題目描述 給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 請問 k 0 k 1 k m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的...

劍指offer 剪繩子

題目 給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k m k 0 k 1 k m 可能的最大乘積是多少?例如當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此 時得到最大的乘積18。思路 動態規劃 任何動態規劃都是由遞迴演...