动态规划,java实现算法导论15章钢条切割
来自浙江理工大学在读研究生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章钢条切割相关推荐
- 算法导论中的钢条切割问题
问题描述: 公司购买长钢条,将其切割为短钢条进行出售,切割工序本身没有成本支出,公式管理层希望知道最佳的切割方案.假定我们知道公司出售一段长为i英寸的钢条价格为pi:钢条的长度均为整英寸.给定一段 ...
- 《算法导论》15章-动态规划 15.1 钢条切割(含有C++代码)
一.引入 动态规划方法通常用来求解最优化问题(optimizationproblem).这类问题可以有很多可行解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解.我们称这样的解为问 题 ...
- 算法导论15.1动态规划之钢条切割
动态规划与钢条切割 1.分治算法与动态规划 相同点: 都是通过组合子问题的解来求解原问题 不同: 1.分治将问题划分为互不相交的子问题,递归地求解子问题,在将它们的解组合起来,求出原问题. 2.动态规 ...
- Java实现算法导论中线性规划单纯形算法
需在理解算法导论中线性规划单纯性算法基础上理解Java实现的代码,结合http://blog.csdn.net/fjssharpsword/article/details/53195556理解. 具体 ...
- Java实现算法导论中Miller-Rabin随机性素数测试
Miller-Rabin测试: 费马小定理:对于素数p和任意整数a,有ap ≡ a(mod p)(同余).反过来,满足ap ≡ a(mod p),p也几乎一定是素数. 伪素数:如果n是一个正整数,如果 ...
- Java实现算法导论中快速傅里叶变换FFT递归算法
要结合算法导论理解,参考:http://blog.csdn.net/fjssharpsword/article/details/53281889 代码中算法思路:输入n位(2的幂)向量,分别求值FFT ...
- Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)
对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...
- 我眼中的算法导论 | 第一章——算法在计算中的作用、第二章——算法基础
一个小白的算法学习之路.读<算法导论>第一天.本文仅作为学习的心得记录. 算法(Algorithm) 对于一个程序员来说,无论资历深浅,对算法一词的含义一定会或多或少有自己的体会,在< ...
- Java实现算法导论中Rabin-Karp字符串匹配算法
Rabin-Karp算法的思想: 假设子串的长度为M,目标字符串的长度为N 计算子串的hash值 计算目标字符串中每个长度为M的子串的hash值(共需要计算N-M+1次) 比较hash值 如果hash ...
最新文章
- Linux自动化测试monkey,APP自动化测试中Monkey和 MonkeyRunner
- Android实现一个自己定义相机的界面
- 数学基础学习随笔--序言
- 查看java返回的值,JavaScript 遍历对象查找指定的值并返回路径
- Batch Normalization的作用及原理
- 答辩攻略之二:纯方案赛
- “山东土地集团杯”暨滨州市数据应用创新创业大赛正式启动!
- 8.Java有关变量的面试题
- 可视化 - pyecharts
- [75] Making arrangements
- Springboot + Mybatis + Ehcache
- 3分钟搞懂MySQL事务隔离级别及SET TRANSACTION影响事务
- 华为杯数学建模优秀论文_数学建模经典例题(2013年国赛A题与优秀论文)
- 【毕业设计】jSP在线教学质量评价系统的设计与实现(源代码+论文)
- 项目中关于IFRAME引发的问题【出现率很高】
- php中的图片变名为8位用什么,CSS_详解PNG图片,1、PNG图片类型
PNG格式有8位、 - phpStudy...
- XP连接网络计算机未启动服务,XP搜索不到网络提示“请启动Windows零配置(WZC)服务”的解决方法...
- 软件开发公司能开发哪些类型的app软件
- Kaptcha 验证码框架使用
- Win10 卸载了某软件,右键还有该软件,如何删除呢?