码迷,mamicode.com
首页 > 其他好文 > 详细

切钢条问题

时间:2016-09-15 01:04:05      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

 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     @Test
37     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 }

 

切钢条问题

标签:

原文地址:http://www.cnblogs.com/wjf0/p/5873984.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!