剑指offer之剪绳子问题

1 问题

给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].
请问k[0] * k[1] …k[m]可能的最大乘积是多少?
例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18.
 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 分析

1) 分析边界值

n和m题目说了,要求大于1,所以绳子长度最少为2,而且每段的长度不能小于1。

当n=2的时候,我们只有一种分割方法,就是中间切断,变成了1*1 = 1,所以当绳子长度为2的时候,切断数长度乘积最大值为1

当n=3的时候,我们有2种分割方法,就是1*1*1 =  1,然后就是1*2 = 2,所以当绳子长度为2的时候,切断数长度乘积最大值为2

当n=4的时候,我们有3种分割方法,就是1*1*1*1 =  1,然后就是1*2 *1 = 2,还有2 * 2 = 4,所以当绳子长度为2的时候,切断数长度乘积最大值为4;

当n=5的时候,我们有4种分割方法,就是1*1*1*1*1 =  1,然后就是1* 2 *1 * 1 = 2,还有2 * 2 * 1 = 4,还有1 * 3 * 1 = 3,还有2 * 3 = 6;所以当绳子长度为2的时候,切断数长度乘积最大值为6;

我们记最大值为f(n)为长度为n绳子剪成若干段的最大乘积,我们可以知道f(n) = max{f(i) * f(n - i)}, i ∈ {1,2...,n - 1},

f(n)的最优解对应着f(i)和f(n-i)的最优解,假如f(i)不是最优解,那么其最优解和f(n-i)乘积肯定大于f(n)的最优解,然后f(i)又可以看成f(n),大问题包含小问题,并且大问题的最优解包含着小问题的最优解,所以可以使用动态规划求解问题.

f(4) = max{f(1) * f(3), f(2) * f(2)} = 4;f(5)= max{f(1) * f(4), f(2) * f(3)} = 6;...f(n) = max{f(1) * f(n -1), ... , f(i) * f(n - i), ... }; 由于具有对称性,所以这里的i的范围是  i ∈ {1, 2..., n / 2};

 

 

 

 

 

 

 

 

 

 

 

 

3 代码实现

#include <stdio.h>
#include <stdlib.h>int maxCutting(int len)
{if (len <= 1){return 0;}if (len == 2){return 1;}if (len == 3){return 2;}int *data = (int *)malloc(sizeof(int) * len + 1);if (data == NULL){printf("malloc data fail\n");return 0;}data[0] = 0;data[1] = 1;data[2] = 2;data[3] = 3;int max;for (int i = 4; i <= len; ++i){max = 0;for (int j = 1; j <= i / 2; ++j){max = data[j] * data[i - j];if (data[i] < max){data[i] = max;}}//printf("data[%d] is %d\n", i, data[i]);}return data[len];free(data);return 1;
}int main(void) 
{int result = maxCutting(8);if (!result){printf("输入绳子长度不合法或者开辟数组内存失败\n");return -1;}printf("绳子长度为8的最大切割乘积值为%d", result); return 0;
}

 

 

 

 

 

 

 

 

 

4 运行结果

绳子长度为8的最大切割乘积值为18

 

 

 

 

 

 

 

 

 

 

 

5 总结

大问题包含小问题,并且大问题的最优解包含着小问题的最优解,所以可以使用动态规划求解问题.动态规划我们可以理解成高中数学知识的数列关系,既迭代,我们最关键的是找到迭代关系,如上题f(n) = max(f(i) * f(n -1));

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机打字比赛活动策划书怎么写,打字比赛策划书范文.docx

打字比赛策划书范文第 PAGE \* Arabic \* MERGEFORMAT 7 页打字比赛策划书范文打字比赛策划书(一)一、比赛简介&#xff1a;为了丰富大学生的课余生活&#xff0c;提高学生动手能力和综合素质&#xff0c;本协会面对全体协会成员开展此项打字比赛活动。此项活动为我协会电脑培训…

okhttp上传图片和其他参数_Android中Okhttp3实现上传多张图片同时传递参数_放手_前端开发者...

之前上传图片都是直接将图片转化为io流传给服务器&#xff0c;没有用框架传图片。最近做项目&#xff0c;打算换个方法上传图片。Android发展到现在&#xff0c;Okhttp显得越来越重要&#xff0c;所以&#xff0c;这次我选择用Okhttp上传图片。Okhttp目前已经更新到Okhttp3版本…

MicroStation V8i简体中文版中文字体乱码解决办法

Bentley (奔特力)是一家软件研发公司,其核心业务是满足负责建造和管理全球基础设施,包括公路、桥梁、机场、摩天大楼、工业厂房和电厂以及公用事业网络等领域专业人士的需求。Bentley 在基础设施资产的整个生命周期内针对不同的职业,包括工程师、建筑师、规划师、承包商、…

剑指offer之斐波那契数列

1 问题 写一个函数&#xff0c;输入n,求斐波那契数列的第n项。斐波那契数列定义如下。 f(n) 0; (n 0)f(n) 1; (n 1)f(n) f(n - 1) f(n - 2); (n > 2); 2 分析 1) 直接用递归 2) 我们用两个变量保持每次需要计算下一个值得前面2个数&#xff0c;从最前面开始迭代。…

网页特殊符号HTML代码大全

网页特殊符号HTML代码大全 HTML特殊字符编码大全&#xff1a;往网页中输入特殊字符&#xff0c;需在html代码中加入以&开头的字母组合或以&#开头的数字。下面就是以字母或数字表示的特殊符号大全。 &acute;©©>>&micro;&reg;&&amp…

惠普ProDesk行业专用台式机U盘不识别解决办法

惠普ProDesk行业专用台式机在使用的过程当中&#xff0c;老出现插入U盘不识别的问题&#xff0c;总是需要在重启的过程中插入U盘才能使用U盘&#xff0c;解决办法是&#xff1a;&#xff08;1&#xff09;打开设备管理器&#xff0c;如下图所示&#xff1a;&#xff08;2&#…

【一】Windows API 零门槛编程指南——MessageBox 基本使用及基础讲解

本篇作为Windows API 系列文章的第一篇&#xff0c;将简要的讲解一下什么是Windows API&#xff0c;Windows API能做些什么&#xff0c;并且尽可能讲解一些新出现的专有名词&#xff1b;本系列博文几乎没有难啃的“专业术语”&#xff0c;尽量让读者能够看明白文章所述内容&…

计算机辅助翻译的启示,翻译单位研究对计算机辅助翻译启示.PDF

2009 年第 6 期 外语研究 2009 , №6总第 118 期 Foreign L anguages Research Serial №118翻译单位研究对计算机辅助翻译的启示苏明阳 丁  山( 国际关系学院 ,江苏 南京 2 10039)摘  要 : 本文是将翻译理论研究成果引入并指导计算机辅助翻译系统发展的一个尝试 。作者首先…

中国人工智能学会通讯——基于视频的行为识别技术 1.1 什么是行为

今天跟大家分享的主题是基于视频的 行为识别领域研究&#xff0c;主要介绍一下早期 的非深度学习传统方法和近期深度学习 方法取得的结果。深度学习方法带来了 非常大的变革&#xff0c;提升了识别系统的性能&#xff0c; 但这并不意味着我们把传统的东西都要 抛弃&#xff0c;…

querybuilder 排序_elasticsearch的匹配与排序问题

后台搜索使用的java apipublic List searchQueryTeam(String term, int limit, int offset, int isHighlight, long seed) throws Exception {final List list new ArrayList();SearchRequestBuilder srbTeam client.prepareSearch(INDEX_NAME).setTypes("Team").s…

剑指offer之青蛙跳台阶问题

1 问题 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级台阶&#xff0c;求该青蛙跳上一个n级的台阶总共有多少种跳法&#xff1f; 2 分析 我们可以定位函数f(n),n为n级别的台阶&#xff0c;f(n)的值是青蛙有多少种跳法&#xff0c;我们知道当n为1的时候&#xff0c;f…

惠普ProDesk行业专用台式机U盘重装系统时显示器不显示的解决办法

该配置的机子是独立显卡&#xff0c;也就是说主机后面有两个显示器接口&#xff0c;换一个试试吧&#xff0c;超级管用。

Windows 11 22H2 22610 重磅发布!删除水印,多彩任务管理器,文件资源管理器深度优化...

面向 Dev 和 Beta 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 22H2 预览版 Build 22610。主要变化1.微软现已更新 Windows 11 任务管理器的进程页面&#xff0c;将随着 Windows 主题颜色而变化。2.微软现已更新锁屏上的电池图标&#xff0c;适配 Windows…

oracle job 定时执行参数

oracle job 常见的执行时间1、每分钟执行trunc(sysdate,mi)1/(24*60)2、每天定时执行如&#xff1a;每天凌晨0点执行trunc(sysdate1)每天凌晨1点执行trunc(sysdate1)1/24每天早上8点30分执行trunc(sysdate1)(8*6030)/(24*60)3、每周定时执行每周一凌晨2点执行trunc(next_day(sy…

一篇文教你使用python Turtle库画出“精美碎花小清新风格树”快来拿代码!

Turtle库手册可以查询查询 python图形绘制库turtle中文开发文档及示例大全&#xff0c;手册中现有示例&#xff0c;不需要自己动手就可以查看演示。 文章修改记录 修改记录 1&#xff1a;2020年5月17日 12:06:51 由于某些童鞋回复说自己会卡死&#xff0c;请把代码&#xff…

QQ,MSN,Skype在线客服代码

QQ,MSN,Skype在线客服代码 在网站建设时&#xff0c;为了更好的实施网站的营销型&#xff0c;会用到QQ&#xff0c;MSN等在线交流&#xff0c;以便客户能够快捷方便的联系我们。在这里&#xff0c;提供QQ&#xff0c;MSN的在线客服代码给大家分享&#xff1a; 1.QQ在线咨询代码…

阿里云500服务器内部错误,腾讯云服务器网站不能打开 提示内部错误http 500

满意答案2010qqww2015.11.14采纳率&#xff1a;55% 等级&#xff1a;9已帮助&#xff1a;13114人实服务器内部500错误大概可分为两种&#xff0c;一种是服务器本身权限问题&#xff0c;另一种是程序上不规范或者错误造成。所以要解决此问题需要先弄清楚其到底是哪种原因&…

物联网智能硬件设备常见攻击方法

以太网接入型设备&#xff0c;一般分为网线或WiFi两种。不管是WiFi还是网线&#xff0c;可以通过局域网抓包、笔记本WiFi桥接抓包等等手段。最著名的抓包软件 Wireshark如何抓取硬件设备的网络数据包&#xff0c;考量的是网络知识基本功&#xff0c;需要大家自行度娘&#xff0…

Hadoop(四)C#操作Hbase

HbaseHbase是一种NoSql模式的数据库&#xff0c;采用了列式存储。而采用了列存储天然具备以下优势&#xff1a;可只查涉及的列&#xff0c;且列可作为索引&#xff0c;相对高效针对某一列的聚合及其方便同一列的数据类型一致&#xff0c;方便压缩同时由于列式存储将不同列分开存…

剑指offer之两个栈实现队列问题

1 问题 两个栈实现队列的插入和获取头部元素的功能 2 分析 我们定义连个栈stack1&#xff0c;stack2&#xff0c;当队列弹出头部元素的时候&#xff0c;我们知道队列先进后出&#xff0c;我们先把一个元素压到stack1,然后再压一个元素到stack1,然后我们把stack1的top函数得到…