題目:
給你一根長度為 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。
示例 1:
輸入: 2
輸出: 1
解釋: 2 = 1 + 1, 1 × 1 = 1
示例 2:
2 <= n <= 58
解題思路:
1.當n<2時,結果為0;
2.當n==2時,只有一種剪法:1*1,所以結果為1;
3.當n==3時,有一種剪法:1*2,所以結果為2;
4.當n>3時,max=max(nums(i)*nums(n-i));以n==4為例,nums(4)=nums(2)*nums(2)=4;
nums[i]儲存的是當前這段繩子的最大值
**實現:
class solution
else if(n==2)
else if(n==3)
int *nums=new int[n+1];
nums[0]=0;
nums[1]=1;
nums[2]=2;
nums[3]=3;
int max=0;
for(int i=4;i<=n;++i){
for(int j=1;j<=i/2;++j){
if(max耗時和記憶體使用情況:
面試題14 I 剪繩子
給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 1 請問 k 0 k 1 k m 1 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。示例 1 ...
面試題14 剪繩子
長度為n的繩子,剪為m段,求最大乘積 思路 第一刀後 f n f i f n i 從下到上計算,4可被分為兩個2段 5可分為乙個2乙個3 int maxproductaftercutting int length int max 0 product 1 1 product 2 2 product 3...
面試題14 剪繩子
面試題14 剪繩子 題目 給你一根長度為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。思路 動態規劃為了...