leetcode343. Integer Break

在hyper-v管理器中修改WSL虚拟交换机后,打开wsl闪退 此次是因为修改了WSL虚拟交换机造成的wsl打不开或闪退,还有一种可能是关闭了hyper-v造成了wsl。 阅读详情

Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.

题目大意是说给定一个正整数n,将其拆分成正好等于至少2个正整数相加,使得这几个正整数的乘积最大。

Example 1:

Input: 2
Output: 1
Explanation: 2 = 1 + 1, 1 × 1 = 1.

Example 2:

Input: 10
Output: 36
Explanation: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36.

分析:

上面的两个输入例子还是比较好懂的,这里我们详细进行分析。试几个输入用例,我们会发现,如果可以不分解出1,那么就尽量不分解出1,什么意思呢,比如n=3,那么最大乘积的分解方法是1*2=2,但是不会分解成1*1*1=1,因为乘以1对乘积结果没有影响,还会占用求和,因此,使用带1进行分解是比较“亏”的。

第二个问题是,我们既然已经知道了尽量不要用1进行分解,那么,n满足什么条件可以不用分解呢?

n=2,分解成1*1=1;n=3,分解成1*2=2;n=4,分解成2*2=4。也就是说,当n>=4的时候,分解中就不会带有1。

由此,我们想到一种动态规划算法,声明一个长度为n的数组,dp[i]=w表示使用题目中所描述的分解方法进行分解得到的最大乘积是w。接下来也就是最重要的部分,如何设定初始值以及寻找到状态转移方程。

首先考虑状态转移方程(其实一般的动态规划应该首先考虑初始值,但是这道题比较特殊,因为初始值的设定比较难,而如果从状态转移方程入手就知道应该如何设定初始值)

从dp数组的含义,不难更新dp数组,下面,以一个具体的例子说明如何更新dp数组

n=8,想求出最大分解后的乘积,第一种情况是第一个数是1,然后看剩下的7分解后最大乘积是多少,然后将结果相乘,也就是dp[1]*dp[7];

第二种情况是第一个数是2,然后看剩下的6分解后最大乘积是多少,然后将结果相乘,也就是dp[2]*dp[6];在这里千万不要以为我是把n=8只拆分成两个数,2和6,因为6是否分解取决于dp[6]的决策,从这里就可以看到这是一个典型的由递归转换成的动态规划(因为当前的决策依赖于之前的决策)。

如果看清了这一点,那么dp[8]=max(dp[i]*dp[8-i]),其中i取值1-7

好,抽象出来,对于任意位置i,dp[i]=max(dp[j]*dp[i-j])。由此,我们终于找到了状态转移方程。

最后一个问题,初始值如何设定?

从dp数组的含义我们知道,dp[5]表示将5分解之后得到的最大乘积,应该是2*3,也就是dp[2]*dp[3],在这里,dp[2]=2。由以上分析知道当n<=3的时候,dp[i]=i。分析到这一层,就不难写出如下的代码了。

    int integerBreak(int n) {
        if (n<=3)
            return n-1;
        vector<int>dp;
        dp.push_back(0);
        dp.push_back(1);
        dp.push_back(2);
        dp.push_back(3);
        int i,j, tempMax = 0;
        for (i = 4; i <= n; i++){
            tempMax = i - 1;
            for (j = 2; j <= i/2;j++)
            if (dp[j] * dp[i - j] > tempMax)
                tempMax = dp[j] * dp[i - j];
            dp.push_back(tempMax);
        }
        return dp.back();
    }

题解:洛谷 P14357 [CSP-J 2025] 拼数 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。小 R 想知道,在他所有能拼成的正整数中,最大的是多少。你需要帮助小 R 求出他能拼成的正整数的最大值。小 X 给了小 R 一个字符串。输出一行一个正整数,表示小 R 能拼成的正整数的最大值。中的任意多个数字,按任意顺序拼成一个正整数。,表示小 X 给小 R 的字符串。#普及-# #其他排序#洛谷:[P14357。 阅读详情

相关推荐

SCI、中科院1区算法应用:(BWO-CNN-BiGRU-Attention)白鲸优化深度学习-融合注意力机制预测程序代码!包含特征可视化,数据Excel导入,直接运行!

BWO 白鲸优化算法,于2022年发表在SCI、中科院1区期刊《Knowledge-Based Systems》上。我们利用该高创新算法对我们的CNN-BiGRU-Attention时序和空间特征结合-融合注意力机制的回归预测程序代码中的超参数进行优化。

weixin_48747334的博客 3261

leetcode每日一题:343. 整数拆分

😚一个不甘平凡的普通人,日更算法学习和打卡,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘系列:动态规划语言:java难度:中等题目来源:Leetcode343. 整数拆分。

Jing_Hua 840

Android HCE实战:手把手教你用Kotlin实现NFC公交卡模拟(含完整APDU指令解析)

本文是一份Android HCE实战指南,详细讲解如何使用Kotlin实现NFC公交卡模拟。内容涵盖HCE服务搭建、APDU指令(如SELECT AID、GET PROCESSING OPTIONS)的完整解析与响应逻辑,并提供读卡器端测试代码,帮助开发者深入理解基于主机的卡模拟技术。

qsc901234567的博客 1117

LeetCode刷题-343. 整数拆分

难度:中等⭐️⭐️⭐️⭐️。

快乐的小小程序猿 433

软硬件协同设计的大小端问题

缘起 最近需要在soc系统内做协处理器,加速AES加密运算,寄存器一次读取32bit,AES一次处理128bit,因此在数据拼接的时候,需要考虑大小端的问题,特来记录一番。 一、什么是大小端 大小端的问题发生在寄存器和内存间传递数据,这点非常重要,很多地方简单地说是数据存储方式,其实不准确。追根溯源,大小端问题是在设计load,store指令的时候考虑的,因此本质是寄存器和内存交互的问题,其他地方不会发生。 比如c语言里定义一个变量int a=ox1234,那么查看在线汇编平台的对应汇编代码: # 给2号寄

http://www.icfgblog.com/ 612

STM32 Boot程序实战:从启动流程到安全跳转机制解析

本文深入解析STM32 Boot程序的核心作用与安全跳转机制,涵盖启动流程、内存管理、中断向量表重定向及固件验证等关键环节。通过实战案例分享如何实现可靠的固件升级与故障回退策略,避免设备变砖风险,提升嵌入式系统稳定性。

pluto的博客 779

LeetCode刷题笔记(Java)---第341-360题

文章目录前言笔记导航341.扁平化嵌套列表迭代器 前言 需要开通vip的题目暂时跳过 笔记导航 点击链接可跳转到所有刷题笔记的导航链接 341.扁平化嵌套列表迭代器 给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。 列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。 解答 public class NestedIterator implements Iterator<Integer> { private St

gongsenlin341的博客 539

YOLOv8改进策略【卷积层】| DEConv: 强度信息与梯度特征融合的细节增强 适用于小目标与细节目标检测任务

本文记录的是利用 模块优化 的目标检测网络模型。(Detail-Enhanced Convolution,细节增强卷积)的设计旨在,解决 目标检测网络中传统普通卷积缺乏目标细节相关先验、对小目标边缘、目标与背景边界等关键细节捕捉能力不足的问题,同时避免引入额外参数量与计算开销,以适配 对实时推理性能与检测精度的双重需求。DEA-Net: Single image dehazing based on detail-enhanced convolution and content-guided atte

Limiiiing的博客 348

leetcode:343. 整数拆分

题目来源 343. 整数拆分 题目描述 class Solution { public: int integerBreak(int n) { } }; 题目解析 先仔细分析题目: 要求是:正整数 拆分 为 【正整数 + 正整数 + 正整数】 正整数包括:1、2、3、… 最少要拆成两个数(k >=2 ) 那么,对于一个数,最多可以拆解成多少个数字呢? 对于3 = 1 + 1 + 1、4 = 1 + 1 + 1 + 1 因此,对于一个正整数N,最多可以拆解成N个1 也

OceanStar的博客 1410

使用CubeMX配置STM32H7的FreeRTOS

本文将介绍如何使用CubeMX配置STM32H7的FreeRTOS,并提供相应的源代码示例。通过使用CubeMX,你可以轻松地配置FreeRTOS和系统资源,并生成相应的初始化代码和配置文件。在"FreeRTOS"选项卡的"Tasks"部分,可以配置系统中的任务。首先,打开CubeMX软件。在"FreeRTOS"选项卡的"Resources"部分,你可以配置FreeRTOS使用的资源,例如,堆内存和信号量。例如,我们可以创建两个简单的任务,一个任务将在循环中切换LED的状态,另一个任务将通过串口打印消息。

JeeVue的博客 711

Python 爬虫实战:亚马逊商品评论 + 评分抓取(情感分析数据预处理)

在电子商务领域,用户评论是了解产品口碑和市场反馈的重要渠道。亚马逊作为全球领先的电商平台,拥有海量的商品评论数据。本文将详细介绍如何使用 Python 编写爬虫程序,从亚马逊网站抓取商品评论和评分数据,并进行情感分析的数据预处理。

yansideyucsdn的博客 769

leetcode 343整数拆分 动态规划解法

动态规划: 解决的三种常见问题: 1.最值型问题。 2.计数型问题,求和。 3.存在性问题。 动态规划四步曲: 1.确定状态 1.1最后一步:比如:硬币的问题,可以假设最后一个硬币使用的是ak。 1.2化成子问题:要求最少的硬币拼出n,就是要求最少的硬币拼出n-ak。 2.转移方程 这个比较难,转移方程找好了,就成功了一半。 3.初始条件和边界情况 要确定定义的初始条件。 4.计算顺序 一般都是从小到大进行计算。也有可能从大到小。 现在看这个整数拆分的问题: 给定一个正整数 n,将其拆分为至少两个正整数的和

weixin_41362471的博客 462

【异常】Claude Code 第三方API 400报错(thinking type should be enabled or disabled)解决方案

摘要: Claude Code接入第三方API端点时出现400参数错误,主要因新版默认启用的Adaptive Thinking功能与旧版接口参数格式不兼容(需thinking: {type: "adaptive"},但第三方仅支持布尔值)。解决方案为修改本地settings.json配置文件,添加"CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING": "1"环境变量并重启客户端,即可恢复思考模式功能。Adaptive Th

奶爸的编程之路,也就一周冷个三天 1万+

【leetcode】343. Integer Break

343. Integer Breakhttps://leetcode.com/problems/integer-break/#/description Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integ

xxxxzr的博客 503

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

leetcode题集:343. Integer Break

第11题:343.Integer Break 怎么说呢,水题一时爽,一直水题一直爽。 题目大意:给定一个正整数,使他等于至少两个数之和,并求这些加数的最大积。 题目分析:题目意思很清楚,就是求给定和的加数的最大积。动态转移方程:,其中。直接上代码: class Solution { public: int integerBreak(int n) { if(n=...

wx_14678的博客 324

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【leetcode】【medium】343. Integer Break​​​​​​​

343. Integer Break Given a positive integern, break it into the sum ofat leasttwo positive integers and maximize the product of those integers. Return the maximum product you can get. Example 1: ...

lemonade13的博客 281

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

[leetcode]343. Integer Break

[leetcode]343. Integer Break Analysis 要加油鸭。。。—— [每天刷题并不难。。。] Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return ...

weixin_32135877的博客 215

Leetcode 343. Integer Break (python+cpp)

Leetcode 343. Integer Break题目解析:解法1:recursion + memorization解法2:动态规划 题目 解析: 本质上这道题目和322 coin change是一样的,只不过用自然数替换coin,用max product替换min count而已,这边我们也用两种方法来解 解法1:recursion + memorization 这边的problem和subproblem之间的关系是: F(s) = max(F(S-i)*i,(S-i)*i for all i) 根

qq_37821701的博客 581

LeetCode 343. Integer Break 解题报告

LeetCode 343. Integer Break 解题报告

骆小坑的填坑之旅 928

【Leetcode】343. 整数拆分(Integer Break)

Leetcode - 343 Integer Break (Medium) 题目描述:给定一个整数 n,求相加等于 n 并且成绩最大的一组整数的积。 Input: 10 Output: 36 Explanation: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36. 解题思路:定义状态 dp[i] 为 i 对应的最大乘积。 public int integerBreak(int n...

厉兵秣码 364

leetcode 343. Integer Break

leetcode 343. Integer Break 题目: Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get. ...

wyxwyx469410930的博客 412

【LeetCode】343. Integer Break

343. Integer Break Description: Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get...

Microstrong 2597

LeetCode刷题:343. Integer Break 整数分割

LeetCode刷题:343. Integer Break 整数分割 原题链接:https://leetcode.com/problems/integer-break/ Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of t...

梅森上校的博客 业精于勤荒于嬉,形成于思毁于随。 347

LeetCode 343. Integer Break

方便发在leet讨论区所以写成了英文=w= LeetCode 343. Integer Break As we all know, result like x^n can get max value, so let M/x = n, then res = x^n = x^(M/x) let : f(x) = x^(M/x) then: lnf(x) = (M/x)lnx f’(x)/f(x) = ...

quyan的博客 189

LeetCode 第 343 题 (Integer Break)

LeetCode 第 343 题 (Integer Break) Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can ge

Ivan 的专栏 7848

Leetcode #343 Integer Break

Leetcode #343 Integer Break

小昕成长史 242
上一篇: leetcode 746.爬楼梯的最小代价(从暴力递归到动态规划)
下一篇: 二分查找没有变形
spencersong
博客等级 码龄9年 11粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值