力扣343 整数拆分

题目

给定一个正整数 n ,将其拆分为 k正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积

动态规划

定义:dp[i]表示将数字i拆分为至少两个正整数的和时,能得到的最大乘积

dp[i]的定义贯穿整个解题过程,后续所有推导都围绕如何通过更小的子问题求解dp[i]

对于每一个正整数i,第一步先把它拆分成i和i-j,此时的乘积为j*(i-j)

对于i-j来说,所有可能的拆分里,乘积最大的是max(j*(i-j),j*dp(i-j))

j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了

代码

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

参考文章

343. 整数拆分 - 力扣(LeetCode)https://leetcode.cn/problems/integer-break/代码随想录https://www.programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE

相关推荐
唐梓航-求职中3 小时前
编程大师-技术-算法-leetcode-355. 设计推特
算法·leetcode·面试
少许极端3 小时前
算法奇妙屋(二十八)-递归、回溯与剪枝的综合问题 1
java·算法·深度优先·剪枝·回溯·递归
仰泳的熊猫3 小时前
题目1453:蓝桥杯历届试题-翻硬币
数据结构·c++·算法·蓝桥杯
唐梓航-求职中3 小时前
技术-算法-leetcode-1606. 找到处理最多请求的服务器(易懂版)
服务器·算法·leetcode
啊阿狸不会拉杆3 小时前
《机器学习导论》第 10 章-线性判别式
人工智能·python·算法·机器学习·numpy·lda·线性判别式
会叫的恐龙3 小时前
C++ 核心知识点汇总(第11日)(排序算法)
c++·算法·排序算法
twilight_4693 小时前
机器学习与模式识别——线性回归算法
算法·机器学习·线性回归
玄同7653 小时前
Python Random 模块深度解析:从基础 API 到 AI / 大模型工程化实践
人工智能·笔记·python·学习·算法·语言模型·llm
爱吃生蚝的于勒3 小时前
【Linux】线程概念(一)
java·linux·运维·服务器·开发语言·数据结构·vim
Pluchon3 小时前
硅基计划4.0 算法 简单模拟实现位图&布隆过滤器
java·大数据·开发语言·数据结构·算法·哈希算法