給你一根長度為 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:
輸入: 10
輸出: 36
解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36
求最值,且子問題之間存在重疊的更小的子問題,應使用動態規劃求解。
1class
solution:
2def cuttingrope(self, n: int) ->int:
3 dp = [0] * (n+1) #
初始化陣列,儲存面積結果
4 dp[0] = 1
5 dp[1] = 1
6for i in range(2, n+1):
7for j in range(1, i):8 #
max(dp[i]:維持之前的狀態,不再剪;dp[i-j]*j:從長為i的基礎上再剪一段長為j的,且剩下的i-j再繼續剪;(i-j)*j:從長為i的基礎上再剪一段長為j的,且剩下的i-j不再繼續剪)
9 dp[i] = max(dp[i], max(dp[i-j] * j, (i-j) *j))
10return dp[n]
1class
solution
12 };
劍指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的三段,此時得到的...
整數反轉(Python and C 解法)
給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉...
替換空格(Python and C 解法)
pyhon中有很多非常方便的替換操作,如 1 return s.replace 20 直接replace替換就行 1 s s.split 2return 20 join s 1 strlen len s 2 newstr 3for i in range strlen 4if s i 20 6 els...