Leetcode 343. 整数拆分(将整数拆分成若干个数之和,使得乘积最大)动态规划

 Leetcode 343. 整数拆分(将整数拆分成若干个数之和,使得乘积最大)动态规划_第1张图片

不建议使用数学方法

dp[i] 表示将整数i拆分后的最大乘积

dp[i] = max( (i-j)*j, dp[i-j]*j] 

class Solution {
public:
    int integerBreak(int n) {
        vector dp(n+1);
        dp[2] = 1;
        for(int i=3;i<=n;i++){
            for(int j=1;j<=i-2;j++){
                dp[i] = max(dp[i],max(dp[i-j]*j,(i-j)*j));
            }
        }
        return dp[n];
    }
};

 

Leetcode 343. 整数拆分(将整数拆分成若干个数之和,使得乘积最大)动态规划_第2张图片

 

 

Leetcode 343. 整数拆分(将整数拆分成若干个数之和,使得乘积最大)动态规划_第3张图片

你可能感兴趣的:(算法)