力扣刷題 2 剪繩子II(動態規劃)

2021-10-06 15:42:14 字數 1084 閱讀 3370

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

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

輸入: 10

輸出: 36

解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36

1.1dp的定義:表示繩子長度為n時最大的乘積數;

1.2初始狀態可知:dp[1]=1;dp[2]=1;dp[3]=2

1.3狀態轉移:如繩子長度為7時可以分解為二種狀態組合;組合方式很多,如:1+6;2+4;3+3;等,在根據題意我們可得:狀態方程為

for

(int i=

7;i<=n;i++

)

主要思想是從列表:

----n:1-2-3-4-5-6-07-08-09-10

結果:1-1-2-4-6-9-12-18-27-36

發現其規律:c[i]狀態可以分解為c[i-3]狀態和長度為3的狀態。

故狀態轉移方程為:c[i]=c[i-3]*3;(i>=7)

class

solution

;//表示長度為n的最大乘積

c[1]

=1; c[2]

=1; c[3]

=2; c[4]

=4; c[5]

=6; c[6]

=9;for

(int i=

7;i<=n;i++

)return

(int

)c[n];}

};

注:第二種方法為什麼是這個規律,我暫時沒有想白這樣的狀態方程是如何來的

力扣刷題(45 跳躍遊戲II)

題目直接截圖於力扣 leetcode 該題 我才發現英文版的題目他給出了約束條件,而中文貌似沒有。吃了偷懶的虧,以後還是看英文吧,順帶還能學習一下英語。ovo 下面是英文題目 下面是中文題目 貪心演算法 並不是所有的貪心策略都能得到想要的最優解。此道題中,自然是每次跳躍都能夠到達最優點,使得本次跳躍...

力扣刷題筆記 動態規劃爬樓梯問題

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例一 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。方法一 1 階 1 階 方法二 2 階 示例二 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂...

leetcode力扣刷題錄2

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉...