来自浙江理工大学在读研究生Yuner:
github地址
个人博客地址

此问题dp式 :rn = max(pi + r(n-1))

不使用dp,用普通的递归方式来求解

//使用普通的方法来计算钢条切割的最优切割方案
public class Steelbarcutting1 {private int[] price;Steelbarcutting1() {price = new int[]{1,5,8,9,10,17,17,20,24,30};}private int cut_rod(int n){int q = 0;if(n == 0)return 0;for(int i = 1; i <= n; i++) {q = Math.max(q,price[i - 1] + cut_rod(n - i));}return q;}public static void main(String[] args) {Steelbarcutting1 steelbarcutting1 = new Steelbarcutting1();System.out.println(steelbarcutting1.cut_rod(9));}
}

使用自顶向下的递归实现

//使用动态规划的方式切割钢条
//自顶向下的动态规划
public class Steelbarcutting2 {private int[] price;private int[] r;Steelbarcutting2() {price = new int[]{1,5,8,9,10,17,17,20,24,30};r = new int[10];}private int cut_rod(int n) {int q = 0;if (r[n] > 0 )return r[n];if(n == 0) {q = 0;}for(int i = 1; i <= n; i++) {q = Math.max(q,price[i - 1] + cut_rod(n -i));}r[n]=q;return q;}public static void main(String[] args) {Steelbarcutting2 steelbarcutting2 = new Steelbarcutting2();System.out.println(steelbarcutting2.cut_rod(7));}
}

使用自低向上的版本

//自低向上的动态规划
public class Steelbarcutting3 {private int[] price;private int[] r;Steelbarcutting3() {price = new int[]{1,5,8,9,10,17,17,20,24,30};r = new int[11];}private int cut_rod(int n) {int q = 0;r[0] = 0;for(int j = 1; j <= n; j++) {for(int i = 1; i <= j; i++) {q = Math.max(q,price[i - 1] + r[j - i]);}r[j] = q;}return r[n];}public static void main(String[] args) {Steelbarcutting3 steelbarcutting1 = new Steelbarcutting3();System.out.println(steelbarcutting1.cut_rod(8));}
}

动态规划,java实现算法导论15章钢条切割相关推荐

  1. 算法导论中的钢条切割问题

    问题描述:   公司购买长钢条,将其切割为短钢条进行出售,切割工序本身没有成本支出,公式管理层希望知道最佳的切割方案.假定我们知道公司出售一段长为i英寸的钢条价格为pi:钢条的长度均为整英寸.给定一段 ...

  2. 《算法导论》15章-动态规划 15.1 钢条切割(含有C++代码)

    一.引入 动态规划方法通常用来求解最优化问题(optimizationproblem).这类问题可以有很多可行解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解.我们称这样的解为问 题 ...

  3. 算法导论15.1动态规划之钢条切割

    动态规划与钢条切割 1.分治算法与动态规划 相同点: 都是通过组合子问题的解来求解原问题 不同: 1.分治将问题划分为互不相交的子问题,递归地求解子问题,在将它们的解组合起来,求出原问题. 2.动态规 ...

  4. Java实现算法导论中线性规划单纯形算法

    需在理解算法导论中线性规划单纯性算法基础上理解Java实现的代码,结合http://blog.csdn.net/fjssharpsword/article/details/53195556理解. 具体 ...

  5. Java实现算法导论中Miller-Rabin随机性素数测试

    Miller-Rabin测试: 费马小定理:对于素数p和任意整数a,有ap ≡ a(mod p)(同余).反过来,满足ap ≡ a(mod p),p也几乎一定是素数. 伪素数:如果n是一个正整数,如果 ...

  6. Java实现算法导论中快速傅里叶变换FFT递归算法

    要结合算法导论理解,参考:http://blog.csdn.net/fjssharpsword/article/details/53281889 代码中算法思路:输入n位(2的幂)向量,分别求值FFT ...

  7. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)

    对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...

  8. 我眼中的算法导论 | 第一章——算法在计算中的作用、第二章——算法基础

    一个小白的算法学习之路.读<算法导论>第一天.本文仅作为学习的心得记录. 算法(Algorithm) 对于一个程序员来说,无论资历深浅,对算法一词的含义一定会或多或少有自己的体会,在< ...

  9. Java实现算法导论中Rabin-Karp字符串匹配算法

    Rabin-Karp算法的思想: 假设子串的长度为M,目标字符串的长度为N 计算子串的hash值 计算目标字符串中每个长度为M的子串的hash值(共需要计算N-M+1次) 比较hash值 如果hash ...

最新文章

  1. Linux自动化测试monkey,APP自动化测试中Monkey和 MonkeyRunner
  2. Android实现一个自己定义相机的界面
  3. 数学基础学习随笔--序言
  4. 查看java返回的值,JavaScript 遍历对象查找指定的值并返回路径
  5. Batch Normalization的作用及原理
  6. 答辩攻略之二:纯方案赛
  7. “山东土地集团杯”暨滨州市数据应用创新创业大赛正式启动!
  8. 8.Java有关变量的面试题
  9. 可视化 - pyecharts
  10. [75] Making arrangements
  11. Springboot + Mybatis + Ehcache
  12. 3分钟搞懂MySQL事务隔离级别及SET TRANSACTION影响事务
  13. 华为杯数学建模优秀论文_数学建模经典例题(2013年国赛A题与优秀论文)
  14. 【毕业设计】jSP在线教学质量评价系统的设计与实现(源代码+论文)
  15. 项目中关于IFRAME引发的问题【出现率很高】
  16. php中的图片变名为8位用什么,CSS_详解PNG图片,1、PNG图片类型 PNG格式有8位、 - phpStudy...
  17. XP连接网络计算机未启动服务,XP搜索不到网络提示“请启动Windows零配置(WZC)服务”的解决方法...
  18. 软件开发公司能开发哪些类型的app软件
  19. Kaptcha 验证码框架使用
  20. Win10 卸载了某软件,右键还有该软件,如何删除呢?

热门文章

  1. OpenShift:外国的免费云平台
  2. PHP笔记-PHP中Web Service.
  3. 在网页中嵌入Base64编码文件
  4. Griffon 1.1 发布,Groovy 开发框架
  5. 提醒:安装MS11-100 .NET Framework高危漏洞补丁一定要所有服务器一起安装
  6. 诺基亚:Symbian 3操作系统拥有多点触控功能
  7. 二维数组转datatable的代码
  8. 【重识 HTML + CSS】定位
  9. 【Python笔记】列表的用法
  10. 小程序入门学习17--springboot环境配置01