
AcWing 25 剪绳子
对于n=4:可以分割成2+2,最终乘积为4 对于n=5:2+3,乘积为6 对于n=6:3+3,乘积为9 对于n=7:3+2+2,乘积为12 对于n=8:3+3+2,乘积为18
发布日期:2021-05-28 16:30:16
浏览次数:27
分类:精选文章
本文共 648 字,大约阅读时间需要 2 分钟。
题目描述
你有一根长度为n的绳子,需要将其剪成m段。每一段的长度记为k[0],k[1],...,k[m]。当m、n都为整数,且2≤n≤58时,求这m段绳子的长度的最大乘积。样例
输入:8输出:18分析
直接暴搜会因为分割方式过多而导致时间复杂度太高。因此,我们需要寻找一种能够快速计算出最优分割方案的方法。根据数学分析,当n≥4时,将绳子尽可能均匀地分割成多个3长度的段时,乘积能够达到最大值。
这背后的原理是基于算术基本定理和基本不等式。例如,一个数分割成多个3的和时,乘积通常比分割成2更大的和更优。例如,5分割成2+3的乘积是6,而分割成3+2的乘积并没有区别,结果一样。
例如,当n=8时,有四种分割方式:
- 2+3+3:总乘积为2×3×3=18
- 4+2+2:总乘积为4×2×2=16
- 5+3:总乘积为5×3=15
- 6+2:总乘积为6×2=12
可以看出,分割成3+3+2的方式更优。
分割策略总结:
一般情况下:
- 如果n是3的倍数,则尽可能多地分割成3
- 如果n=3k+1,则分割成k个3和1个4
- 如果n=3k+2,则分割成k个3和1个2
在代码实现中,我们可以直接将这一规则转化为简单计算:
每次尽可能多地减去3,然后处理剩下的1或2。总乘积一开始为1,并在每一步乘以3的数目。从而,可以轻松得到最优解。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月22日 10时58分09秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
android中button修改不了背景颜色
2019-03-17
uniapp自定义弹窗组件|仿微信android/ios弹窗效果
2019-03-17
(网络安全)主动信息收集 操作系统识别
2019-03-17
Class和ClassLoader的getResource方法对比
2019-03-17
redis教程-redis环境搭建安装(qq:1197852132)
2019-03-17
github 入门
2019-03-17
cpp
2019-03-17
学生信息管理系统之增(五):添加用户信息流程
2019-03-21
社区医疗app-Ui设计
2019-03-21
HTML 表单验证
2019-03-21
mysql时间为0000-00-00 00:00:00时,程序读取错误
2019-03-21
ubuntu System program problem detected
2019-03-21
使用ivx图表组件的经验总结
2019-03-21
17场演讲,500+嘉宾 |「观远2020智能决策峰会暨产品发布会」看点先知道
2019-03-21
专访汇付数据副总裁姜靖宇:“纸上谈兵”时代终结,人工智能将变革第三方支付行业
2019-03-21
张小龙的“败走麦城”
2019-03-21
小程序的生命周期
2019-03-21
Redis学习笔记—单个键管理
2019-03-21