算法实践篇-钢条切割问题-动态规划
来源:互联网 发布:管线机什么牌子好 知乎 编辑:程序博客网 时间:2024/04/29 16:34
问题描述:给定一个钢条的长度,求最大效益和切割方法
长度和价格的关系如下:
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 0
- 算法实践篇-钢条切割问题-动态规划
- 【算法设计-动态规划】钢条切割问题
- 《算法导论》动态规划钢条切割问题
- 动态规划-钢条切割问题
- 动态规划:钢条切割问题
- 【动态规划】钢条切割问题
- 动态规划--钢条切割问题
- 动态规划 钢条切割问题
- 动态规划 钢条切割问题
- 动态规划-钢条切割问题
- 用动态规划算法求解钢条切割问题
- 动态规划算法——钢条切割问题
- [算法学习笔记]动态规划之钢条切割问题
- 算法导论笔记 动态规划 -- 钢条切割问题 思路
- 算法导论 - 动态规划 - 钢条切割
- 算法导论---------动态规划之钢条切割
- 算法导论--动态规划(钢条切割)
- 动态规划-钢条切割《算法导论》
- 浅谈紫外线消毒器水力特性探讨
- SEO——友好的HTML和javascript
- ORA-12516: TNS:LISTENER COULD NOT FIND AVAILABLE HANDLER WITH MATCHING PROTOCOL STACK
- Algorithm学习笔记 --- 马虎的算式
- 基于AMBA-AHB总线的SDRAM控制器设计方案
- 算法实践篇-钢条切割问题-动态规划
- 金额转换成英文描述
- JS经常出在面试的问题,闭包,prototype和constructor
- java中字符串的编码解码问题
- netgen有限元网格生成和求解开源库编译
- 定制自己的ide 基于vim+cscope+ctag+talist
- Microsoft SQL Server 管理 (常用管理及维护命令)
- 字符串匹配 之 KMP
- 清除Visual Studio查找的历史记录