leetcode 343. 整数拆分

2023.8.10

本题用dp算法来做,dp[i]代表的含义是:当前数字i 在拆分之后所能获得的最大乘积 。然后由于n>=2,所以dp[0]和dp[1]没有意义,不用初始化,直接初始化dp[2]= 1。 然后再遍历给dp数组赋值:dp[i]的来源有两个:①将i拆成 j 和 (i - j) ,然后相乘,即j*(i-j) 。 ② 将i 拆成 j 和(i-j), 然后(i-j)的最大拆分乘积为dp[i-j],即j * dp[i-j]

思考画的草图:

代码如下:

cpp 复制代码
class Solution {
public:
    int integerBreak(int n) {
        vector<int> dp(n+1); //dp[i]的含义是:当前数字i拆分之后的最大乘积值。
        dp[2] = 1; //初始化
        //遍历赋值
        for(int i=3; i<=n; i++)
        {
            for(int j=1; j<=i/2; j++)
            {
                dp[i] = max(dp[i] , max(j*(i-j),j*dp[i-j]));
            }
        }
        return dp[n];
    }
};
相关推荐
丶小鱼丶8 分钟前
数据结构和算法之【栈】
java·数据结构
玛丽莲茼蒿10 分钟前
LeetCode hot100【相交链表】【简单】
算法·leetcode·职场和发展
罗湖老棍子10 分钟前
They Are Everywhere(Codeforces- P701C)
算法·滑动窗口·codeforce题解
wen__xvn10 分钟前
力扣模拟题刷题
算法·leetcode
bbbb36510 分钟前
算法复杂度与能耗关系的多变量分析研究的技术7
算法
不要秃头的小孩13 分钟前
力扣刷题——111.二叉树的最小深度
数据结构·python·算法·leetcode
.select.14 分钟前
c++ 移动赋值/移动构造函数
开发语言·c++
wutang0ka25 分钟前
LeeCode HOT 100 104.二叉树的最大深度
算法
散峰而望29 分钟前
【基础算法】从入门到实战:递归型枚举与回溯剪枝,暴力搜索的初级优化指南
数据结构·c++·后端·算法·机器学习·github·剪枝
setmoon21431 分钟前
C++代码规范化工具
开发语言·c++·算法