LeetCode--343. 整数拆分(动态规划)

该博客介绍了一个使用动态规划求解整数拆分以最大化乘积的问题。示例展示了如何通过拆分10为3和3及4得到最大乘积36。代码实现中,动态规划数组dp[i]表示将整数i拆分获得的最大乘积,通过遍历找到每个i的最佳拆分策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个正整数 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【i】表示整数i将其拆分为至少两个正整数的和 可以获得的最大乘积。

那么dp【0】=dp【1】=0;//0不是正整数,1不可拆分成两个正整数。

j * dp【i-j】  表示j*将i-j继续拆分的到的最大的乘积

class Solution {
public:
    int integerBreak(int n) {
        vector<int>dp(n+1);
        dp[0]=dp[1]=0;//初始化
        for(int i=2;i<=n;i++)
        {
            int maxx=0;
            for(int j=1;j<i;j++)//拆分成j和i-j两部分
            {
                maxx=max(maxx,max(j*(i-j),j*dp[i-j]));
            }
            dp[i]=maxx;
        }
        return dp[n];
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值