切钢条问题
2016-09-14 23:40
169 查看
package DynamicProgram; import org.junit.Test; import Sort.Array; // 算法分析与设计一书中钢条切割问题 public class CutRod { /** * 返回包含最优解的数组 * @param p p[i]表示长度为i的钢条长度的售价 * @param n 钢条的长度,单位为英寸 */ public int [] bottomUpCutRod(int [] p, int n) { // 用来保存当钢条的长度为n时,最优情况下首次切割左边钢条的长度 int [] array = new int [n + 1]; array[0] = 0; // 长度为i的子问题 for(int i = 1; i <= n; ++i) { // 用来保存最小的代价 int cost = -1; for(int j = 1; j <=i; ++j) // p[j]表示长度为j的钢条所花费的代价 // array[i - j]表示长度为i-j的钢条所花费的代价,前面已经计算出来了 // 之所以不断的保存cost,是为了计算整趟循环中的最大值 cost = Math.max(cost, p[j] + array[i - j]); // 将长度为i的子问题的最低花费保存到数组中 array[i] = cost; } return array; } @Test public void test(){ int [] p = {-1, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30}; int [] array = bottomUpCutRod(p, 10); Array.print(array); } }
相关文章推荐
- Codeforces Round #371 (Div. 1) A. Sonya and Queries(trie)
- 一岁的程序猿
- 二维数组长度
- 树莓派官方系统超频
- 又是九月九, 入职一周年
- mysql中key 、primary key 、unique key 与index区别
- 最长公共子序列LCS
- JavaWEB_POI导出大量数据excel(50万左右)
- 人体呼吸信号的数据挖掘
- xamarin android如何监听单击事件
- [Android] SeekBar 基本使用
- 人体呼吸信号的数据挖掘
- xamarin android如何监听单击事件
- java相关术语解释 terms of java
- Struts2初识
- 取原图旋转角度(IOS和Android相机拍的照片) 自动旋转
- JavaScript 数组详解
- (SSM框架)SpringMVC+Spring4+Mybatis+Maven环境快速搭建开发案例
- python核心编程学习笔记-2016-09-14-03-Web编程(七)
- 18 UI美化之level(等级显示显示)