首页 > 代码库 > 切钢条问题
切钢条问题
1 package DynamicProgram; 2 3 import org.junit.Test; 4 import Sort.Array; 5 6 // 算法分析与设计一书中钢条切割问题 7 8 public class CutRod { 9 10 /**11 * 返回包含最优解的数组12 * @param p p[i]表示长度为i的钢条长度的售价13 * @param n 钢条的长度,单位为英寸14 */15 public int [] bottomUpCutRod(int [] p, int n) {16 // 用来保存当钢条的长度为n时,最优情况下首次切割左边钢条的长度17 int [] array = new int [n + 1];18 array[0] = 0;19 // 长度为i的子问题20 for(int i = 1; i <= n; ++i) {21 // 用来保存最小的代价22 int cost = -1;23 for(int j = 1; j <=i; ++j)24 // p[j]表示长度为j的钢条所花费的代价25 // array[i - j]表示长度为i-j的钢条所花费的代价,前面已经计算出来了26 // 之所以不断的保存cost,是为了计算整趟循环中的最大值27 cost = Math.max(cost, p[j] + array[i - j]);28 // 将长度为i的子问题的最低花费保存到数组中29 array[i] = cost;30 }31 return array;32 33 }34 35 36 @Test37 public void test(){38 int [] p = {-1, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30};39 int [] array = bottomUpCutRod(p, 10);40 Array.print(array);41 }42 }
切钢条问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。