?LeetCode刷題實戰(zhàn)343:整數(shù)拆分
Given an integer n, break it into the sum of k positive integers, where k >= 2, and maximize the product of those integers.
Return the maximum product you can get.
示例
示例 1:
輸入: 2
輸出: 1
解釋: 2 = 1 + 1, 1 × 1 = 1。
示例 2:
輸入: 10
輸出: 36
解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
解題
動態(tài)規(guī)格
在狀態(tài)轉(zhuǎn)移的時候,如果該整數(shù)大于其拆分后的結(jié)果,那么用該整數(shù)本身;否則,用該整數(shù)對應(yīng)的拆分結(jié)果。
class Solution {
public:
int integerBreak(int n) {
vector<int> dp(n + 1, 0);
dp[2] = 1;
for(int i = 3; i <= n; ++i){
for(int j = 1; j <= i / 2; ++j){
dp[i] = max(dp[i], (dp[j] > j ? dp[j] : j) * (dp[i - j] > i - j ? dp[i - j] : i - j));
}
}
return dp[n];
}
};
評論
圖片
表情
