【剑指offer】14、剪绳子

news/2024/12/3 5:04:38/

题目

给一根长度为n的绳子,请把绳子剪成m段(m,n都是整数且1),每段绳子的长度相乘最大乘积是多少?如绳子长度为8,当分别为2,3,3时,此时最大乘积18

思路1

此问题明显包含独立的子问题,用f(n)表示长度为n的绳子剪完后的最大乘积,则可以写出递推公式

f(n) = max{f(n-i) × f(i)}, 0 < i < n

因为自下而上的时间复杂度为O(n), 每次递推时要对i循环O(n) ,所以时间复杂度是O(n2

我们对长度为8的绳子进行模拟。

f(4) = f(2) * f(2) = 4;

f(5) = f(2) * f(3) = 6;

f(6) = f(3) * f(3) = 9;

f(7) = f(3) * f(4) = f(2) * f(5) = 12;

f(8) = f(3) * f(5) = 18;

int maxProAfterCutting(int length){if (length < 2) return 0; //题目说大于1,因此这是异常输入if (length == 2)return 1;if (length == 3)return 2;int* products = new int[length + 1];products[0] = 0;products[1] = 1;products[2] = 2;products[3] = 3;  //其实是从product[4]开始算,这里是为了计算,当输入0 1 2 3时,前面已经处理int max = 0;for (int i =4; i <= length; i++){max = 0;for (int j = 1; j <= i / 2; j++){int product = products[j] * products[i-j];if (max < product)max = product;products[i] = max;}}max = products[length];delete[] products;return max;
}

 

思路2

贪心算法:

当n = 4时,最大乘积就是4.

当n >= 5时,尽可能多剪长度为3的绳子,当剩下为4的时候,就剪成两段2

也就是说,n>=5时,最大乘积都由若干个3,最多两个2构成的

证明很简单:

n >= 5时,3(n-3) >= 2(n-2) > n  

 

转载于:https://www.cnblogs.com/shiganquan/p/9289984.html


http://www.ppmy.cn/news/614392.html

相关文章

pygame是python的一个库吗,python学习pygame,,基本库导入impor

python学习pygame&#xff0c;,基本库导入impor基本库导入import pygameimport sysfrom pygame.locals import *初始化pygame.init()窗口标题pygame.display.set_caption("初次见面多多关照")窗口显示设置screen pygame.display.set_mode(size, RESIZABLE)resizable…

摄像头ISP系统原理(中)

摄像头ISP系统原理&#xff08;中&#xff09; AF&#xff08;FOCUS&#xff09;----自动对焦 根据光学知识&#xff0c;景物在传感器上成像最清晰时处于合焦平面上。通过更改 LENS 的位置&#xff0c;使得景物在传感器上清晰的成像&#xff0c;是 ISP FOCUS 功能所需要完成…

手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(中篇)

近期因俗事缠身&#xff0c;《通过理解LSTM的反向传播过程&#xff0c;理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式&#xff0c;配超多图帮助理解》的中下篇鸽了实在太久有些不好意思了。为了避免烂尾&#xff0c;还是抽时间补上&#xff08;上篇在此&…

摄像头ISP系统原理(下)

摄像头ISP系统原理&#xff08;下&#xff09; l WDR&#xff08;Wide Dynamic Range&#xff09;------宽动态 动态范围(Dynamic Range)是指摄像机支持的最大输出信号和最小输出信号的比值&#xff0c;或者说图像最亮部分与最暗部分的灰度比值。普通摄像机的动态范围一般在1…

git 命令大全

在git Bash中操作&#xff0c; 用到了一些git命令&#xff0c;做一下记录。 一、提交代码 1、提交代码到本地库中 git commit -m 描述内容 2、拉取该分支下的内容&#xff0c;与自己在本地库改写的合并 git pull origin <分支名称> 3、提交代码到github上 git push origi…

vb mysql数据导入到mssql,[请教]怎样把*.txt文本的数据导入sql数据库中?

我分两步走&#xff0c;先将文本文件导入到grid中&#xff0c;然后再上传到数据库。但是我测试下列代码来将文本文件导入时总是出错&#xff0c;不能成功导入&#xff0c;代码如下&#xff1a;Private Sub Command1_Click()On Error GoTo errText1.Text ""Dim a() A…

commander.js

参考链接&#xff1a; http://yijiebuyi.com/blog/2cd3833e8551a302b4ec645031bfd3d0.html http://blog.gejiawen.com/2016/09/21/make-a-node-cli-program-by-commander-js/ https://github.com/tj/commander.js/blob/master/Readme_zh-CN.md .option(-l, --langu, website la…

微擎 jssdk php文件,微擎register_jssdk分享到朋友功能无法使用的问题及解决办法

近期在做微信公众号应用开发时发现微擎register_jssdk分享到朋友功能无法使用&#xff0c;当前使用的微擎版本是1.8.2,通过查阅微信公众号官方的相关文档后发现jssdk的分享功能有进行调整。引用官方的话&#xff1a;请注意&#xff0c;原有的 wx.onMenuShareTimeline、wx.onMen…