刷代码随想录有感(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之前可拆得最大。

相关推荐
Swizard20 分钟前
别再只会算直线距离了!用“马氏距离”揪出那个伪装的数据“卧底”
python·算法·ai
flashlight_hi40 分钟前
LeetCode 分类刷题:199. 二叉树的右视图
javascript·算法·leetcode
LYFlied43 分钟前
【每日算法】LeetCode 46. 全排列
前端·算法·leetcode·面试·职场和发展
2301_8234380243 分钟前
【无标题】解析《采用非对称自玩实现强健多机器人群集的深度强化学习方法》
数据库·人工智能·算法
oscar9991 小时前
CSP-J教程——第二阶段第十二、十三课:排序与查找算法
数据结构·算法·排序算法
chao1898441 小时前
MATLAB与HFSS联合仿真
算法
月明长歌1 小时前
【码道初阶】牛客TSINGK110:二叉树遍历(较难)如何根据“扩展先序遍历”构建二叉树?
java·数据结构·算法
jqrbcts1 小时前
关于发那科机器人视觉补偿报警设置
人工智能·算法
_Li.1 小时前
机器学习-线性判别函数
人工智能·算法·机器学习
蒲小英1 小时前
算法-栈与队列
算法