整数拆分——动态规划

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

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

示例 1:

复制代码
输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

复制代码
输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

思路:

如果最优结果包含一个因子f>=4,那么你可以将其替换为因子2和f-2,而不会丧失最优性,因为

2*(f-2)=2f-4>=f。如此一来,你便无需使用任何大于或等于4的因子,这意味着你只需要用到1、2和3这三种因子(当然,1是一种浪费,仅会在n=2和n=3时才需用到它。)

python 复制代码
class Solution:
    def integerBreak(self, n: int) -> int:
        if n <= 3:
            return n - 1
        
        dp = [0] * (n + 1)
        dp[2] = 1
        for i in range(3, n + 1):
            dp[i] = max(2 * (i - 2), 2 * dp[i - 2], 3 * (i - 3), 3 * dp[i - 3])
        
        return dp[n]

自己写的一版:

让所有的拆分数尽可能的相等,这样的乘积是最大的。

python 复制代码
class Solution:
    def integerBreak(self, n: int) -> int:
        res = 0
        for i in range(2, n // 2 + 1):
            base = n // i
            baseAddNum = n - base * i
            res = max(res, base ** (i-baseAddNum) * ((base + 1) ** baseAddNum))
        return res
print(Solution().integerBreak(10))
相关推荐
raindayinrain9 分钟前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
梯度下降者13 分钟前
零基础入门Python 爬虫
爬虫·python·数据分析·入门指南·webcrawler
学逆向的18 分钟前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao23 分钟前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
学逆向的1 小时前
C 局部静态变量
c语言·开发语言·网络安全
大都督会赢的2 小时前
C++第一节课
开发语言·c++
UIU1142 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
“AI国潮设计-小江”2 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
小王C语言2 小时前
Qt常用控件:容器类控件,标题分组框、标签页(浏览器标签)
开发语言·qt
论文复现现场2 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算