leetcode 343. 整数拆分

2023.8.10

本题用dp算法来做,dpi代表的含义是:当前数字i 在拆分之后所能获得的最大乘积 。然后由于n>=2,所以dp0和dp1没有意义,不用初始化,直接初始化dp2= 1。 然后再遍历给dp数组赋值:dpi的来源有两个:①将i拆成 j 和 (i - j) ,然后相乘,即j*(i-j) 。 ② 将i 拆成 j 和(i-j), 然后(i-j)的最大拆分乘积为dpi-j,即j * dpi-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];
    }
};
相关推荐
言乐614 小时前
Python体现逻辑回归和决策树的区别
开发语言·python·算法·决策树·逻辑回归
顶点多余14 小时前
C/C++常见面试题
开发语言·c++
HugoStudio_SWAN14 小时前
洛谷 B4575 [GESP202609 二级] 直角三角形——临场定义理解与边界质疑
c++·学习·程序人生·算法
(Charon)14 小时前
【C++面试】右值引用与移动语义:std::move到底做了什么
开发语言·c++
红豆诗人14 小时前
C++二叉搜索树:查找、插入和删除为什么这样写
数据结构·c++·算法
HZjiangzi14 小时前
深耕精密驱动二十六载,捷昌驱动助力机器人产业升级发展
人工智能·算法
奋发向前wcx14 小时前
CSP-J复赛模拟赛3 王晨旭补题 2026.10.4
算法
H.莓飛14 小时前
【数据结构】堆_OJ题
linux·数据结构·算法
夏天的清晨15 小时前
C++入门学习
开发语言·c++·学习
汉克老师15 小时前
GESP2026年9月认证C++七级( 第二部分判断题(1~10题)精讲
c++·gesp·小学生·学c++编程