C语言(CED)钢条最优切割收益

目录

一、题目大意

 二、大致思路

三、具体实现 


一、题目大意

       一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi。那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大。提示:将钢条切割为长度为i和n - i两段,接着求解这两段的最优切割收益Ri和Rn - i

 二、大致思路

       本题用到的知识点就是动态规划,以下简称DP,我在解决此题的时候,思路在刚开始的时候是乱着的,首先是题目的意思不明确,后来发现,长度不同的钢条的价格可以自行输入(有点“长度为5的钢条的最大价值是建立在4的基础上”的感觉)即使是在有提示的情况下,我还是没有思路。

       我大脑里将此题与其他DP类型的题目对比,准备用一个二维数组把所有的情况存储一下,但是发现二维数组的横纵坐标代表的属性似乎找不全。后来豁然开朗,解决本题的核心思想就是:分成两段!一根钢条拿来时,他的最大价值将会在两种情况产生:一刀也不切,就切一刀。到这里有的同学可能就不理解了。让我慢慢道来,此处的切一刀其实是分出一个比例,我们把这个切一刀之后左右两边的比称为“最大价值比”,这一刀左侧切出来的最大价值加上右边的最大价值,不就是整段钢条的最大价值了吗?有了这个思路之后,我写出来了如下代码。做完之后再返回头思考,其实这个价格表就是一个入手点,我们可以根据此表,把每一个不同长度的钢条的最大收益计算出来,例如我有了前10个1-10长度的钢条的最大收益,那么长度为11的钢条的最大收益就可以从(1,10)、(2,9)、(3,8)……..(5,6)来选出。这就是只切一刀的真实含义。做了几组DP题目之后,自己也有了一点感觉,无非是递推式,已经知道1,2,3,4时的最优解,求5,6,7,8……等时的最优解。

三、具体实现 

#include<stdlib.h>
#include<iostream>
#include<stdio.h>
using namespace std;
int value[1000] = { 0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30 };//按照题目给的数据初始化,之后用来记录每个长度的最优值
int abcmp(int a, int b)//比较两个int型数的大小,返回大的数
{int max = 0;max = a > b ? a : b;return max;
}
void result(int n)//用二重循环将每一个长度的钢条的最大收益记录
{int i, j;//循环变量for (i = 2; i <= n; i++)//只有2及以上单位长度才能分割,所以从2开始{int max = value[i];//刚开始的最大值默认是一段钢条不切的情况for (j = 1; j <= i / 2; j++)//循环条件这样的原因是,//一旦j过半,切割两段的情况就重复了{max = abcmp(max, value[j] + value[i - j]);//比较当前最大值}value[i] = max;}
}
int main()
{int n = 0;//钢条的长度cout << "请输入钢条的长度:";cin >> n;result(n);//调用函数cout << "收益的最大值为:" << value[n] << endl;system("pause");return 0;
}

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

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

相关文章

撰写paper时,如何在word里输入图片或其他文献(PDF)里的公式?(更新时间2022.03.01)

我们在写paper时&#xff0c;经常会遇到在Word里编写数学公式的问题&#xff0c;其中大多数公式是已经存在的&#xff0c;所以只需要识别、复制、粘贴即可&#xff0c;那么接下来&#xff0c;我就介绍一下“Mathtype”“Mathpix”的方法&#xff0c;分为所需软件、软件操作、公…

家里接入某运营商300M宽带,为何网速还是很慢?(还未装修房屋的请进来)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 引言&#xff1a;家里接入300M的宽带&#xff0c;但是自我感觉网速不佳&#xff0c;遂结合所学知识&#xff0c;对此问题进行分析、研究和调察&…

(CED)列指针与行指针的联系与区别

一、列指针&#xff08;竖为列&#xff09; 1、列指针相关定义 列指针&#xff1a;被称为是指针变量指向二维数组的某个元素 一般使用时会有如下定义&#xff1a; int a[3][4]{1,2,3,4,5,6,7,8,9,10,11,12}; int *p;而上述代码定义的指针p&#xff0c;一般按照下表方式指向…

一、Pytho第一课——Python安装及配置路径方法(最详细小白教程,没有之一。如若不懂,不是还可以私信嘛!对吧?)

目录 一、下载软件 二、安装 三、编辑器 四、在Pycharm上成功运行Python程序&#xff08;配置Python解释器&#xff09; 一、下载软件 官方下载地址&#xff1a;https://www.python.org/downloads/&#xff08;打开似乎很吃力&#xff0c;必要时刻“挂灯”&#xff09; …

二、Python第二课——变量命名规则及字符串变量相关函数

目录 一、变量命名规则 二、字符串变量及相关函数 1、字符串变量 2、相关函数 最后琐碎杂物&#xff1a; 1、字符串之间的拼接 2、字符串格式控制&#xff08;制表符和换行&#xff09; 一、变量命名规则 正如其他编程语言一样&#xff0c;程序离不开声明变量&#x…

三、Python第三课——Python中数字的用法及编码原则(Python禅意)

目录 一、Python中的数字 1、整数 2、浮点数 3、整数、浮点数和字符串的联系和区别 二、编码原则 1、为代码增加注释 2、Python 禅意 A、编码精美 B、避繁就简 C、无简就繁 D、使用常规方法解决问题 E、先有效、再精巧、逐步升华 一、Python中的数字 编程中&#…

四、Python第四课——Python中列表及其操作(增删改查)

目录 一、Python中的列表 1、列表的定义和赋值 2、列表的使用 二、列表的“增删改查” 1、列表中元素的增加 A、在列表尾添加元素 B、在列表中插入元素 2、列表中“元素的删除” A、使用del语句删除元素 B、使用pop()函数删除元素 C、弹出列表中任何位置元素…

五、Python第五课——Python中组织列表的相关函数

目录 一、用sort()函数对列表进行永久排序 二、用sorted()函数对列表进行临时排序 三、用reverse()函数对列表进行列表原始排序的逆序输出 四、使用len()函数确定列表长度 创建列表后&#xff0c;内部的元素逐渐增多&#xff0c;其排列顺序也是无法预测的&#xff0c;因为…

如何正确下载、安装Codeblocks?

目录 一、Codeblocks的下载 二、Codeblocks的安装 三、Codeblocks的运行 相信很多同学在初学C语言时都会选择一个短小精悍的代码编辑器&#xff0c;如CodeBlocks&#xff08;不说别的了&#xff0c;直接切入正题&#xff09;。 在2020年&#xff08;今年&#xff09;3月份-…

Python:创建列表,其中包含数字1-1000000,为什么Pycharm控制台结果显示不完整?

目录 一、问题描述&#xff08;寻找解决方法的同学直接看“标题二”&#xff09; 二、解决办法 一、问题描述&#xff08;寻找解决方法的同学直接看“标题二”&#xff09; 在学习Python过程中遇到一个这样的问题&#xff0c;也算是一个小BUG吧。题目大意是这样的&#xff…

六、Python第六课——Python中的for循环及数字列表

目录 一、Python中的for循环 1、for循环语句的声明。 2、for循环缩进常见问题 二、数字列表 1、函数range() 2、使用range()函数创建数字列表 3、使用一系列函数处理数字列表&#xff08;统计&#xff09; 4、列表解析&#xff08;生成列表的简洁方法&#xff09; 一…

七、Python第七课——有关列表的二三事(切片、切片的遍历和复制)

目录 一、切片 二、遍历切片 三、列表的复制 一、切片 此前&#xff0c;我们学习了如何访问单个列表以及如何处理列表中的所有元素&#xff0c;那么我们如何处理列表中的部分元素呢&#xff1f;这就引出一个概念“切片” 。我们可以把列表看成是面包&#xff0c;“切片”…

八、Python第八课——元组与列表、代码格式

&#xff08;请先看置顶博文&#xff09;https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 一、元组的定义 二、元组的遍历 三、代码格式 一、元组的定义 1、元组&#xff1a;不可变的列表称为元组。这个是相对于普通列表而言的&#xff0c;普通列表…

九、Python第九课——Python中的if语句与运用

&#xff08;请先看置顶博文&#xff09;https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 一、if语句 1、检查变量存储的值是否相等 2、判定字母或字符串时区别大小写 3、检查多个条件 4、检查特定值是否在列表中 二、if-else语句和if-elif-el…

十、Python第十课——字典的些许知识(重点)

&#xff08;请先看置顶博文&#xff09;https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 &#xff08;请先看置顶博文&#xff09;https://blog.csdn.net/GenuineMonster/article/details/104495419 初识字典 1、创建字典 2、字典的“增删改查” …

百度地图API如何申请?(自认为比较详细,如解决了你的问题请收藏、点赞、关注)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 注意&#xff1a;自己申请的AK要保存好&#xff0c;最好不要外借&#xff0c;避免不必要的麻烦&#xff01;&#xff08;写在前面&#xff09; 目…

PythonPyqt5项目开发完成后如何使用pyinstaller打包——以Pycharm编辑器为例(目前为止最正确的版本,成功打包日期为2020.11.26)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 最近用Python开发了一个可视化界面&#xff0c;开发过程如鱼得水&#xff0c;几乎没有BUG出现&#xff08;项目简单&#xff09;。但是在临近交付时…

十一、Python第十一课——用户输入和另一种循环(While)

&#xff08;请先看置顶博文&#xff09;https://blog.csdn.net/GenuineMonster/article/details/104495419 学了这么久的Python&#xff0c;大家肯定会好奇&#xff0c;不是说机器学习吗&#xff1f;不是人机交互吗&#xff1f;不是人工智能吗&#xff1f;怎么我学了Python都十…

如何让新创建的Python文件自动生成作者信息等内容(以Pycharm为例)

&#xff08;请先看置顶博文&#xff09;https://blog.csdn.net/GenuineMonster/article/details/104495419 打开Pycharm软件后&#xff0c;点击“File”&#xff0c;然后点击“Settings”&#xff0c;就会出现下面截图界面&#xff1a;然后按照箭头所指&#xff0c;在对应位置…

如何将谷歌浏览器的背景色(包括显示的网站界面等)全部调为黑色?2020.12.28

&#xff08;请先看置顶博文&#xff09;https://blog.csdn.net/GenuineMonster/article/details/104495419 因为电脑显示器正对窗户的原因&#xff0c;平时为了透气通风不能使用遮光帘&#xff0c;所以我将整个电脑的所有软件的主题色设为黑色&#xff0c;这样能降低一些光的…