整数拆分——动态规划

给定一个正整数 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))
相关推荐
满怀冰雪18 分钟前
24-PaddleClas 模型评估、导出与推理部署入门
大数据·人工智能·python·深度学习·paddle
Chester_19995 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
DeepVisionary6 小时前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
阡之尘埃6 小时前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
裕晟资质规划6 小时前
武器装备科研生产单位保密资质申请方法论:条件模型与流程拆解
人工智能·算法
海兰6 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
EXI-小洲7 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
cvcode_study7 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python
会周易的程序员7 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导7 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt