給你一根長度為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。思路 動態規劃 任何動態規劃都是由遞迴演...