面試題14 I 剪繩子

2021-10-06 16:51:00 字數 2149 閱讀 7779

給你一根長度為 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:

輸入: 2

輸出: 1

解釋: 2 = 1 + 1, 1 × 1 = 1

示例 2:

2 <= n <= 58

解題思路:

ⅰ 動態規劃 定義dp[i]為長度為i的繩子通過剪斷得到的最大積值

等式關係:dp[i] = max(dp[i],dp[j]*dp[i-j]); //每剪一次,將最大值存入dp[i]

ⅱ 數學方法:取最多的3時取得最大值,遇4取4(4 .> 22分)

為什麼不是2? 因為33分》222分

n = 3a + b(b =0or1or2) 利用除法取餘 和冪函式pow(底數,冪次)可求得積

tips:注意234等不用分割反積而更大的特殊情況

class

solution

}

return dp[n];*/

//取最多的3時取得最大值,遇4取4

/*if(n <= 3) return n-1;

int maxvalue = 1;

while(n > 4)

return maxvalue*n;*/

//直接用庫函式

if(n <=3)

return n-1;

int a = n/3;

int b = n%3;

if(b ==1)

return

pow(

3,a-1)

*4;else

if(b ==0)

return

pow(

3,a)

;else

return

pow(

3,a)*2

;}};

當n值較大時

答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1

//貪心+快速冪or迴圈冪

class

solution

return (int)(maxvalue*n%1000000007);*/

/*if(n <= 3) return n-1;

int a = n/3;

int b = n%3;

if(b == 0) return (int)pow(3,a)%1000000007; //pow的返回值是double型別,不能進行取餘操作

else if(b == 1) return 4*(int)pow(3,a-1)%1000000007;

else return 2*(int)pow(3,a)%1000000007;*/

//快速冪

if(n <=3)

int a = n /3;

int b = n %3;

if(b ==2)

else

}// private long quickpow(int x, int n)

// long y = quickpow(x, n / 2);

// return (n & 1) == 1 ? (y * y * x) % 1000000007 : (y * y) % 1000000007;

// }

private

long

quickpow

(int x,

long n)

tt *

= tt;

tt %

=1000000007

; n /=2

;}return res;}}

}};//遞迴

/*class solution

public long process(long n)

}*///基於貪心的動態規劃

/*class solution

return dp[n];

}};*/

面試題14 I 剪繩子

題目 給你一根長度為 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 輸...

面試題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。思路 動態規劃為了...