刷代码随想录有感(102):动态规划——整数拆分

题干:

代码:

cpp 复制代码
class Solution {
public:
    int integerBreak(int n) {
        vector<int>dp(n + 1);
        dp[0] = 0;
        dp[1] = 0;
        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];
    }
};

dp[i]含义:i这个数被拆分且取乘积的最大值。

递推公式:①拆成两个:j 和 i - j;②拆成两个以上:j 和 dp[i - j],且dp[i]是dp[i]、j*(i-j)、j*dp[i-j]中的最大值(包括dp[i]的原因是dp[i]不断被更新取最大值),max()一次只能比较两个数。

初始化:dp[0]=0、dp[1]=0、dp[2]=1。

遍历顺序:从3开始,通过找规律有在i/2之前可拆得最大。

相关推荐
leoufung14 小时前
LeetCode 427:Construct Quad Tree 题解与两种思路对比
算法·leetcode·职场和发展
sin_hielo14 小时前
leetcode 3531
数据结构·算法·leetcode
zmzb010314 小时前
C++课后习题训练记录Day48
数据结构·c++·算法
小毅&Nora14 小时前
【后端】【工具】短信短链接如何做到“永不丢失“?从哈希冲突到百万QPS的可靠性设计
算法·哈希算法
qy-ll14 小时前
Leetcode100题逐题详解
数据结构·python·学习·算法·leetcode
珂朵莉MM14 小时前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--碳中和
人工智能·算法
良木生香14 小时前
【数据结构-初阶】详解线性表(2)---单链表
c语言·数据结构·算法
牛三金14 小时前
魔改-隐语PSI通信,支持外部通信自定义
服务器·前端·算法
菜鸟233号14 小时前
力扣106 从中序与后序遍历序列构造二叉树 java实现
java·算法·leetcode