LeetCode 343. 整數拆分--動態規劃
- 整數拆分
給定一個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。 返回你可以獲得的最大乘積。
示例 1:
輸入: 2
輸出: 1
解釋: 2 = 1 + 1, 1 × 1 = 1。
示例 2:
輸入: 10
輸出: 36
解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
說明: 你可以假設 n 不小於 2 且不大於 58。
題解:
定義陣列dp[maxn],dp[n]表示數字n可以得到的題意描述的答案,那麼設x取值範圍在[1,n-1]之間,於是我們的答案dp[n]=max(x*(n-x),xdp[n-x]);這個不難理解,x在區間[1,n-1]取值,另外的數字n-x有兩種狀態,一個是不展開,那麼答案就是x(n-x),另外一個是展開看看有沒有更大的值,於是有x*dp[n-x],於是狀態轉移方程如上所示。
AC程式碼
class Solution {
public:
int dp[60];
int integerBreak(int n) {
for(int i=2;i<=n;i++)
{
for(int j=1;j<i;j++)
{
dp[i]=max(dp[i],dp[i-j]*j);
dp[i]=max(dp[i],(i-j)*j);
}
}
return dp[n];
}
};
相關文章
- 整數劃分問題(動態規劃)動態規劃
- [leetcode] 動態規劃(Ⅰ)LeetCode動態規劃
- leetcode 整數拆分(c++)LeetCodeC++
- leetcode:動態規劃( hard )LeetCode動態規劃
- leetcode總結——動態規劃LeetCode動態規劃
- leetcode題解(動態規劃)LeetCode動態規劃
- LeetCode動態規劃總結LeetCode動態規劃
- 【LeetCode】Word Break 動態規劃LeetCode動態規劃
- 動態規劃之數的劃分動態規劃
- 【leetcode】741 摘櫻桃(動態規劃)LeetCode動態規劃
- leetcode-動態規劃總結LeetCode動態規劃
- 【LeetCode】Word Break II 動態規劃LeetCode動態規劃
- 【動態規劃(一)】動態規劃基礎動態規劃
- c++ 動態規劃(數塔)C++動態規劃
- LeetCode-343. 整數拆分 - 題解分析LeetCode
- [LeetCode] 動態規劃題型總結LeetCode動態規劃
- Leetcode 編輯距離(動態規劃)LeetCode動態規劃
- LeetCode 動態規劃 House Robber 習題LeetCode動態規劃
- [leetcode 1235] [動態規劃]LeetCode動態規劃
- 動態規劃動態規劃
- 醜數問題——動態規劃、Java動態規劃Java
- LeetCode 分割回文串II(動態規劃)LeetCode動態規劃
- LeetCode入門指南 之 動態規劃思想LeetCode動態規劃
- LeetCode:動態規劃+貪心題目整理LeetCode動態規劃
- 【LeetCode】55. 跳躍遊戲 (動態規劃)LeetCode遊戲動態規劃
- 動態規劃分析動態規劃
- 動態規劃(DP)動態規劃
- 動態規劃初步動態規劃
- 模板 - 動態規劃動態規劃
- 動態規劃法動態規劃
- 動態規劃-硬幣組合數目動態規劃
- 【動態規劃】求最大連續bit數動態規劃
- Leetcode 題解演算法之動態規劃LeetCode演算法動態規劃
- LeetCode總結,動態規劃問題小結LeetCode動態規劃
- 【LeetCode動態規劃#10】完全揹包問題實戰,其三(單詞拆分,涉及集合處理字串)LeetCode動態規劃字串
- 演算法系列-動態規劃(1):初識動態規劃演算法動態規劃
- 演算法提高 數的劃分 動態規劃 無序演算法動態規劃
- [leetcode初級演算法]動態規劃總結LeetCode演算法動態規劃