給你一根長度為 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
思路:
當我們剪繩子的時候,考慮它的拆分問題,只需要考慮長度被兩個數相加的情況就可了,不要再往下拆分,否則就只能列舉所有拆分的可能情況,那樣就成了暴力解法了。
用陣列dp[i]表示max。
只有當i>=5時,才是i的各拆分部分之積的最大值(也就是題目要求的最優值)更大,此時dp[i]的值才是題目要求的解,所以在2<=n<=4的情況下,就單獨處理了。比如,當後面計算的dp[i]需要用到dp[2],顯然,我們應該返回2,而不是2的拆分最大值1。所以,當下面用到的加數小於5時,使用它們本身而不是它們的拆分值,因為小於5時它們本身更大,只有當加數大於等於5時,才用它們的拆分值。
class
solution}}
return dp[n];}
}
CUDA學習(五十一)
動態全域性記憶體分配和操作 動態全域性記憶體分配和操作僅受計算能力2.x和更高的裝置支援 void malloc size t size void free void ptr 從全域性記憶體中的固定大小的堆中動態分配和釋放記憶體 void memcpy void dest,const void sr...
思考(五十一) 登入流程(四)
使用 golang 寫閘道器時,通常每個 socket 玩家 都是併發處理邏輯的 閘道器的第一條訊息,玩家賬號令牌驗證大概率存在併發錯誤,而程式設計師往往無法察覺 本人也是昨天剛剛在壓力測試中發現的,這裡記錄一二 這裡假設 gateway 具備會話保持的特性 常見的邏輯基本如下 偽 func onm...
LeetCode第五十一題 N皇后
問題簡介 給定乙個n n的棋盤,求解如何將n個皇后放置在棋盤上,保證其之間不互相攻擊,即給定乙個整數 n,返回所有不同的解決方案,用 q 和 分別代表了皇后和空位 注 例如下圖為n 8 時的乙個解 舉例 輸入 4 輸出 q solution 1 q q q.q.solution 2 q q q 解法...