LeetCode 343. 整数拆分——动态规划

343. 整数拆分

提示

给定一个正整数 n ,将其拆分为 k正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积

示例 1:

输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

提示:

  • 2 <= n <= 58

题解

class Solution {
public:
    int integerBreak(int n) {
        vector<int> dp(n + 1, 0);  // 初始化为0,避免初始值干扰
        dp[0]=1;dp[1]=1;dp[2]=1;
        for (int i = 3; i <= n; ++i) {
            for (int j = 1; j < i; ++j) {
                // 比较直接拆分(j*(i-j))和继续拆分(j*dp[i-j])
                dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]));
            }
        }
        return dp[n];
    }
};
posted @ 2025-03-06 23:29  ToFuture$  阅读(16)  评论(0)    收藏  举报