整数拆分——动态规划

给定一个正整数 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))
相关推荐
caimouse1 小时前
Reactos 第 5 章 进程与线程 — 5.4 系统调用 NtCreateThread()
服务器·开发语言
吴梓穆1 小时前
Python 基础语法2 if 运算符 循环
android·开发语言·python
叫我:松哥1 小时前
基于数据挖掘的旅游景点个性化推荐系统设计与实现,Apriori和FP-Growth算法挖掘景点之间的关联规则
人工智能·python·算法·数据挖掘·数据分析·beautifulsoup
极光代码工作室1 小时前
基于机器学习的客户分类系统设计
人工智能·python·深度学习·机器学习
copyer_xyf1 小时前
FastAPI 核心语法
后端·python
SilentSamsara2 小时前
scikit-learn 工作流工程化:Pipeline、ColumnTransformer 与自定义转换器
开发语言·人工智能·python·机器学习·青少年编程·numpy·scikit-learn
我命由我123452 小时前
Kotlin 开发 - Kotlin 反引号转义关键字
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
KaMeidebaby2 小时前
卡梅德生物技术快报|噬菌体筛选:技术实操:宽谱大肠杆菌噬菌体筛选全流程与性能验证方案
前端·人工智能·算法·数据挖掘·数据分析
Hillain2 小时前
软件设计师设计模式
java·开发语言·经验分享·笔记·算法·设计模式·软考