算法实践篇-钢条切割问题-动态规划

算法复习——动态规划篇之钢条切割问题 算法复习——动态规划篇之钢条切割问题 以下内容主要参考中国大学MOOC《算法设计与分析》,墙裂推荐希望入门算法的童鞋学习! 1. 问题背景 钢铁切割: ​ 现有一段长度为10的钢条,可以零成本将其切割为多段长度更小钢条。 ​ 比如有以下几种切割方案: ​ 问题是怎么合理切割,使总收益最大? 2. 问题定义 钢条切割问题(Rod Cutting Problem) 输入: 钢条长度nnn 价格表p[l](1≤l≤n)p[l](1 \leq l \leq n)p[l](1≤l≤n):表示长度为ll 阅读详情

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.youkuaiyun.com/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.youkuaiyun.com/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

 

问题描述:给定一个钢条的长度,求最大效益和切割方法
长度和价格的关系如下:
length  1  2  3  4  5  6  7  8  9  10
price   1  5  8  9  10 17 17 20 24 30

package com.dynamic;

public class CutRod {
	private int []price;
	private int length;
	private int []r;
	private int []s;
	public CutRod(int []price){
		this.price=price;
	}
	/**
	 *自顶向下递归 
	 * @param length
	 * @return
	 */
	public int momoizedCutRod(int length){
		r=new int[length+1];
		for(int i=0;i<=length;i++){
			r[i]=-1;
		}
		return memoizedCutRodAux(length,r);
	}
	private int memoizedCutRodAux(int length,int []r){
		if(r[length]>=0){
			return r[length];
		}
		int q;
		if(length==0){
			q=0;
		}else{
			if(length>=price.length){
				q=price[price.length-1];
			}else{
				q=price[length];
			}
			if(length>price.length){
				for(int i=1;i<=price.length-1;i++){
					q=Math.max(q, price[i]+memoizedCutRodAux(length-i,r));
				}
			}else{
				for(int i=1;i<=length-1;i++){
					q=Math.max(q, price[i]+memoizedCutRodAux(length-i,r));
				}
			}
		}
		r[length]=q;
		return q;
	}
	
	public int bottomUpCutRod(int length){
		r=new int[length+1];
		r[0]=0;
		for(int j=1;j<=length;j++){
			int q=0;
			if(j>=price.length){
				q=price[price.length-1];
			}else{
				q=price[j];
			}
			for(int i=1;i<=j;i++){
				q=Math.max(q, price[i]+r[j-i]);
			}
			r[j]=q;
			
		}
		return r[length];
	}
	
	public int extendBottomUpCutRod(int length){
		r=new int[length+1];
		s=new int[length+1];
		r[0]=0;
		for(int j=1;j<=length;j++){
			int q=0;
			if(j>=price.length){
				q=price[price.length-1];
			}else{
				q=price[j];
			}
			for(int i=1;i<=j;i++){
				if(q<=price[i]+r[j-i]){
					q=price[i]+r[j-i];
					s[j]=i;
				}
			}
			r[j]=q;
			
		}
		return r[length];
	}
	
	public void printSolution(int length){
		extendBottomUpCutRod(length);
		int n=length;
		while(n>0){
			System.out.print(s[n]+" ");
			n=n-s[n];
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		int []price=new int[]{0,1,5,8,9,10,17,17,20,24,30};
		CutRod cut=new CutRod(price);
		System.out.println(cut.extendBottomUpCutRod(3));
		cut.printSolution(3);
		System.out.println(cut.extendBottomUpCutRod(4));
		cut.printSolution(4);
		System.out.println(cut.extendBottomUpCutRod(5));
		cut.printSolution(5);
		System.out.println(cut.extendBottomUpCutRod(10));
		cut.printSolution(10);
		System.out.println("===========");
		System.out.println(cut.bottomUpCutRod(5));
		System.out.println("===========");
		System.out.println(cut.momoizedCutRod(4));
	}

}

 

【动态规划】钢条切割问题 0- 动态规划问题的一般步骤 1- 刻画一个最优解的结构特征 2- 递归定义最优解的值 3- 计算最优解的值,通常采用自底向上的方法 4- 利用计算出的信息构造一个最优解 1- 问题描述 Serling 公司购买长钢条,将其切割为锻钢条出售。切割工序本身没有成本支出。公司管理层希望知道最佳的切割方案。 假定我们知道Serling公司出售一段长度为i英寸的钢条的价格为pi(i = 1, 2,…,单... 阅读详情

相关推荐

Python 算法入门教程:动态规划之钢条切割问题

钢条切割问题,主要讲解了什么是钢条切割问题,如何利用动态规划算法解决钢条切割问题,给出了钢条切割问题的实现伪代码并进行分析,并用 Java 语言进行了伪代码实现,帮助大家通过钢条切割问题更好的理解动态规划算法思想的应用。我们来考虑现实生活中的一个实际应用场景,某个钢材公司购买长钢条,将其切割为短钢条出售,其中切割过程本身不考虑成本,公司管理层想知道最赚钱的钢材切割方案。

win19970108018的博客 757

Python数据结构与算法-动态规划(钢条切割问题)

python数据结构与算法

little_limin的博客 1943

钢条切割问题(动态规划)

钢条切割问题(动态规划)

qq_52042398的博客 1087

算法导论-动态规划-钢条切割问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、钢条切割定义二、具体步骤1.思考2.代码思考3.动态规划求解4.伪代码 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、钢条切割定义 图为价格表 给定一段长度是n的钢条和一个价格表,求切割方案使得收益达到最大(允许全不切割的情况存在) 二、具体步.

kxlnx的博客 5453

Python实现动态规划切割钢条问题

该题目来自《算法导论》书中动态规划一章的实例,书上用的是伪代码实现。 切割钢条问题的描述: http://www.cnblogs.com/mengwang024/p/4342796.html 以下是我的python实现: price = [0, 1, 5, 8, 9, 10, 14, 17, 20, 24, 30] cut_point = [] def cut_rod(length)

micheal_yejinglin的专栏 2963

动态规划-钢条切割

动态规划 简介 目的:求解最优解问题; 思想:组合子问题的解来求解原问题; 一. 可以解决哪些问题: 1. 问题的目标是求解一个问题的最优解; 2. 整体问题的最优解依赖于各个子问题的最优解; 3. 大问题分解成若干小问题,且这些小问题还可能继续分解为若干更小的问题; 4. 从上向下分析问题,从下向上解决问题。 二. 设计动态规划的方法: 刻画一个最优解结构特征: 即要求满足题目要求的解的特征;...

nuist_Jiang的博客 1453

钢条切割(动态规划问题)

动态规划 动态规划与分治方法相似都是通过组合子问题的解来求解原问题 动态规划通常用来求解最优化问题,这样的问题可以有很多个可行解,每一个解都有一个值,我们希望寻找具有最右值(最大值 或者 最小值)的解, 最优值有一个,但是最优解可能有多个; 通常按如下四个步骤设计一个动态规划算法 1、刻划一个最优解的结构特征 2、递归地定义最优解的值 3、计算最优解的值,通常采用自底向上方法 4、利用计算出的信息...

weixin_44016068的博客 1790

动态规划——钢条切割最优解算法

最优价格表 钢条长度 1 2 3 4 5 6 7 8 9 10 钢条价格 1 5 8 9 ...

weixin_44003309的博客 1904

算法设计与分析——动态规划(二):钢条切割

分类目录:《算法设计与分析》总目录 我们第一个应用动态规划的例子是求解一个如何切割钢条的简单问题。公司购买长钢条,将其切割为短钢条出售。切割工序本身没有成本支出。公司管理层希望知道最佳的切割方案。 假定我们知道公司出售一段长度为iii英寸的钢条的价格为ppp。钢条的长度均为整英寸。下图给出了一个价格表的样例。 每段长度为iii英寸的钢条为公司带来ppp美元的收益钢条切割问题是这样的:给定一段长度为nnn英寸的钢条和一个价格表ppp,求切割钢条方案,使得销售收益rrr最大。注意,如果长度为nnn英寸的钢条的价

冯·诺依曼 2万+

钢条切割问题:动态规划算法的典型应用

在工业生产和物流管理中,钢条切割问题是一个常见的优化问题。企业在购买长钢条并将其切割为短钢条出售时,往往面临着如何切割以最大化利润的问题。这个问题不仅关系到企业的成本控制和利润最大化,也涉及到资源的有效利用和生产效率的提升。本文将介绍钢条切割问题的数学模型,以及如何运用动态规划算法来寻找最优的切割方案。

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 2016

【算法-动态规划】钢条切割问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 2万+

动态规划算法---钢条切割

算法进阶---动态规划算法钢条切割问题:程序实现: 钢条切割问题: 程序实现: 方法一和方法二是对程序实现的不断深入,逐渐降低算法实现的时间复杂度。 p = [0, 1, 5, 8, 9, 10, 17, 17, 20, 21, 23, 24, 26, 27, 27, 28, 30, 33, 36, 39, 40] # p = [0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30] #方法一,两边都切割,重复了很多计算 #@cal_time def cut_rod_recu

qq_43061415的博客 2977

动态规划之钢条切割问题

动态规划解决钢条切割收益最大化的问题,使用了带备忘录的自顶向下和自底向上两种方法

动态规划--钢条切割问题

动态规划算法通常基于一个递推公式及一个或多个初始状态。当前子问题的解将由上一次子问题的解推出。动态规划和分治法相似,都是通过组合子问题的解来求解原问题。分治法讲问题划分成互不相交的子问题,递归求解子问题,再将他们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的子子问题。在这种情况下,分治算法会做出许多不必要的工作,它会反复的求解那些公共子问题。而动态规划算法对每个子子问题只求解一次,将结果保存到表格中,从而无需每次求解一个子子问题都要重新计算。

2301_76618920的博客 1832

ARM双核锁步DCLS Lockstep技术研究(FPGA实现)

基于《Applying Dual-Core Lockstep in Embedded Processors to Mitigate Radiation-induced Soft Errors》文章总结 RISC-V双核锁步DCLS Lockstep技术参考之前文章: RISC-V双核锁步DCLS Lockstep技术总结_远古架构师alanwu的博客-优快云博客https://blog.youkuaiyun.com/heyuming20062007/article/details/123329537ARM+RIS

heyuming20062007的博客 8730

一款值得关注的开源企业管理ERP系统

盒木ERP是一款开源的现代化企业管理系统,采用前后端分离架构,后端基于Python+Django,前端使用Vue+Ant Design。系统涵盖采购、销售、库存、财务等核心业务模块,支持移动端操作和PDA扫码。具有开源免费、技术先进、功能完善等特点,适合中小企业使用或二次开发。项目提供详细部署指南,支持Docker容器化部署,是学习ERP系统开发和企业数字化转型的优秀选择。

1112

算法动态规划钢条切割问题

在算法设计中,钢条切割问题是一个经典的动态规划问题,它不仅展示了动态规划的基本思想,也为我们解决现实生活中的优化问题提供了宝贵的思路。例如,虽然自底向上动态规划在性能上优于带备忘录的递归方法,但如果团队成员对递归的概念更加熟悉,那么在某些情况下使用递归方法可能更容易理解和维护。最直观的方法是使用递归来解决问题,即尝试所有可能的切割方式,然后选择收益最大的一种。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。一边打入敌人内部一边持续提升自己。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1324

告别交越失真:手把手教你设计高性能互补输出级电路(LTspice实测)

本文深入剖析音频放大器中常见的交越失真问题,并提供基于LTspice仿真的实战解决方案。通过对比二极管偏置、Vbe倍增器和集成运放驱动三种经典方案,手把手指导设计高性能互补输出级电路,涵盖原理分析、仿真验证及实物调试要点,助力消除音频失真,提升音质。

weixin_29190573的博客 553

算法导论-动态规划(钢条切割问题)

写下文章来记录下自己学习算法导论的笔记 文章目录写下文章来记录下自己学习算法导论的笔记动态规划的目的设计动态规划算法钢条切割问题问题描述刻画问题结构(建立方程)递归方程建立带备忘录的自顶向下法自底向下的方法如何保留切割方案源代码 动态规划的目的 求出最优子结构 设计动态规划算法 1.刻画一个最优解的结构特征 2.递归定义最优解的值 3.计算最优解的值 4.利用计算出的信息构造一个最优解 钢条切割问题 问题描述 ​ Serling公司购买长钢条,将其切割为短钢条出售。切割工序本身没有成本支出。公司管理层希.

fff1412的博客 2703

远程桌面连接失败?手把手教你解决CredSSP加密Oracle漏洞(Win10/Win11通用)

本文详细解析了Windows远程桌面连接因CredSSP加密Oracle漏洞安全更新导致的“身份验证错误”问题。文章从原理入手,提供了通过组策略编辑器(适用于专业版)和注册表编辑器(适用于家庭版)两种核心解决方案,指导用户将安全策略调整为推荐的“缓解”模式,以在保障安全的前提下恢复连接,并给出了高级脚本处理与安全最佳实践。

u6v7w8x的博客 729

kmeans聚类分析结果怎么看_【Stata与机器学习】物以类聚-KMeans算法应用案例介绍...

古语有云:物以类聚,人以群分。KMeans是无监督机器学习中的聚类算法中最简单的一种——基于特征对样本进行归为不同的类,很好地阐述了‘物以类聚’这句话的精髓。机器学习又叫统计学习。既然都统计了,所以当然包括了计量经济学。所以一般来说,机器学习的算法类型远多于计量经济学。比如线性回归,这个算是机器学习算法中比较基础的部分。当然,计量经济学在回归分析、因果推断方面的造诣,也是普通机器学算法所不能比的。...

weixin_39857480的博客 1万+

动态规划-钢条切割问题

1.动态规划       什么是动态规划,我们要如何描述它?        动态规划算法通常基于一个递推公式及一个或多个初始状态。当前子问题的解将由上一次子问题的解推出。        动态规划和分治法相似,都是通过组合子问题的解来求解原问题。分治法将问题划分成互不相交的子问题,递归求解子问题,再将他们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的...

wangjun的博客 4953

宝塔面板 python管理器2.0安装Mrdoc

自从python管理器从1.9升级2.0后,导致原教程不能使用。 故关于2.0新开教程如下。 关于python管理器2.0 最大的区别在于: python管理器2.0不再需要进入虚拟环境,直接在当前环境进行操作,但是需要指定python路径及pip路径。 1、新建mrdoc工程目录,下载源码: 新建目录【mrdoc】,进入mrdoc目录,并在宝塔ssh或或远程ssh中执行 ,下载源码 git clone https://gitee.com/yang_lite/MrDoc.git .

debj031634的专栏 6001

算法导论——钢条切割问题(C语言)

《算法导论》在对动态规划讲解时,第一个问题就是钢条切割的问题。 在书中,对这个问题提供了3种思路 利用普通的递归来解,时间复杂度为O(2^n) 对普通的递归进行优化,使其带有记忆功能,减少运行时间。即自顶向下的动态规划 运用数组,自底向上的动态规划 现在依次讲解这三个思路,并且用代码实现它们! 首先先看题 现在给你一根钢条,你可以把它切成几个小部分(也可以不用切割),要找到一种方法,使得这根钢条可以卖出最多的价钱。 如:长度为4的钢条有三种卖法 不切割直接买,可以买价格9 切割为1,3再买,同样是价

brench11的博客 4713

最新2026年《网络数据安全风险评估办法》条款解读

大型企业集团IT变革下的零信任安全体系建设方案(55页).pptx。以数据安全为核心的安全立体防御体系解决方案(41页).pptx。让数据安全合规地创造价值(15页 PPT).pptx。大型集团数据安全应急预案(57页).docx。数据安全治理与评估服务业务介绍.pptx。数据安全管理实践(17页).pptx。大数据安全架构设计方案.pptx。大数据安全规划总体方案.pptx。数据库安全综合治理方案.pptx。医疗数据安全建设方案.pptx。数据安全框架规划图.pptx。数据安全治理方案.pptx。

cdfunlove的博客 51

如何在 SAP Server Side JavaScript 里消费 destination

在SAP云平台里打开SAP HANA Web-Based Development Workbench进行服务器端JavaScript的开发。 创建一个新的package: 创建一个新的application: 创建一个新的文件google-distance-api.xshttpdest用于维护destination相关信息: host = "maps.googlea...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 616
上一篇: 数据结构-红黑树扩张-区间树
下一篇: 算法实践篇-多矩阵乘法最优次序-动态规划
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值