算法导论——动态规划:钢条切割

算法导论——动态规划:钢条切割

package org.loda.dynamic; import org.junit.Test; /** * * @ClassName: RodCutting * @Description: 钢条切割 * * 动态规划问题 * * 给定一段长度为n英寸的钢条和一个价格表Pi,求切割钢条的方案,使得销售收益Rn最大 * * @author minjun * @date 2015年5月17日 下午12:54:46 * */ public class RodCutting { /** * 记录所有价格表 */ private int[] p={1,5,8,9,10,17,17,20,24,30}; //存储之前计算的最优价钱,初始值默认为0 private int[] r; //存储最优价钱时所切割的第一段的长度 private int[] s; @Test public void cutting(){ int n=8; long start=System.nanoTime(); cutting(n); System.out.println("长度为"+n+"英寸切割的最大收益为"+r[n]); System.out.println("切割的两段分别为:"+s[n]+","+(n-s[n])); long end=System.nanoTime(); System.out.println("时间消耗:"+(end-start)/1000000.0+"毫秒"); } private void cutting(int n) { r=new int[n+1]; s=new int[n+1]; //记录第一段切割长度为i时计算过程的数值 for(int i=1;i<=n;i++){ //假设第一段切割长度为i的最大收益为max,为它取个哨兵量的值,即为最小整数 int max=Integer.MIN_VALUE; //不断切割以尝试获取最大收益 for(int j=1;j<=i;j++){ //本次切割后收益更多,就取为本次切割的收益为最大收益,并将本次切割的第一段的长度设为最优切割长度 if(max<p[j-1]+r[i-j]){ max=p[j-1]+r[i-j]; s[i]=j; } } //完成所有的切割尝试之后,会统计出最优的切割方案所获取的收益,将该收益记录为长度n的最优收益 r[i]=max; } } }

输出结果为:

长度为8英寸切割的最大收益为22 切割的两段分别为:2,6 时间消耗:0.386708毫秒

转载于:https://my.oschina.net/u/1378920/blog/415989

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109450.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • selenium报 OSError: [Errno 20] Not a directory

    selenium报 OSError: [Errno 20] Not a directory

    2022年3月13日
    51
  • 对接【支付宝】支付接口「建议收藏」

    对接【支付宝】支付接口「建议收藏」场景最近在做支付宝的接口对接,之前做过一个版本,但是由于申请了新的账号以前旧的的接口对接就不能使用了所以就开始对接新的版本接口对接,在这里也记录一下让那些还没有对接的兄弟少走点弯路。准备先申请

    2022年8月6日
    2
  • 在C#中利用wmi操作DNS服务器

    在C#中利用wmi操作DNS服务器public class DNSAdminLib    {        //要连接的DNS服务器        private string sServerPath;        //用户名        private string username = null;        //密码        private string password = null;        //服务器

    2022年10月2日
    0
  • break 和continue 区别以及用法。

    break 和continue 区别以及用法。今天我们来介绍一下循环里的break和continue的用法以及区别我们大家先记住一句话:break再循环中的作用是跳出一个循环或者结束一个循环接下来我们来写一个题目来实现一下这个break的功能。题目:从100打印到0是7的倍数并且求出最大值是多少publicclassDemo{publicstaticvoidmain(String[]agrs){for(

    2022年6月10日
    38
  • 》》初识移动端–rem

    》》初识移动端–rem<!DOCTYPEhtml><html><head><metacharset=”utf-8″/><metaname=”viewport”content=”width=device-width,user-scalable=no,initial-scale=1.0,ma…

    2022年7月24日
    5
  • nginx一个端口配置多个项目_映射地址怎么设置

    nginx一个端口配置多个项目_映射地址怎么设置Nginx默认的80端口如果想要同时配置多个项目,让项目实现不需要指定端口号即可访问,按照如下配置即可更多精彩更多技术博客,请移步IT人才终生实训与职业进阶平台-实训在线前置内容使用Nginx部署Vue项目这片笔记里面介绍了如何使用Nginx部署项目找到对应项目的Nginx配置一般比较规范的配置方式是为每个单独的项目创建.conf文件,如…

    2022年9月4日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号