劍指offer 面試題14 剪繩子

題目描述
給你一根長度爲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。
輸入描述:
輸入一個數n,意義見題面。(2 <= n <= 60)
輸出描述:
輸出答案。
示例1
輸入
複製
8
輸出
複製
18

動態規劃,不過複雜度依然是o(n^2)

class Solution {
public:
    int cutRope(int number) {
        if(number<1) {
            return number;
        } else if(number==1||number==2) {
            return 1;
        } else if(number==3) {
            return 2;
        }
        vector<int> dp(number,0);
        dp[0]=1;
        dp[1]=2;
        dp[2]=3;
        for (int i = 3; i < number; i++)
        {
            int max=0;
            for (int j = 0; j < i/2+1; j++)
            {
                if(dp[j]*dp[i-j-1]>max) {
                    max=dp[j]*dp[i-j-1];
                }
            }
            dp[i]=max;
        }
        return dp[number-1];
    }
}; 
發佈了94 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章