public class RodCutting {
public static void main(String[] args) {
int n = 5;
int[] prices = new int[]{1, 4, 5, 6, 8};
long start = System.currentTimeMillis();
System.out.println(cut(n, prices));
long end = System.currentTimeMillis() - start;
System.out.println(end);
}
private static Map<Integer, Integer> intermidum = new HashMap<Integer, Integer>();
private static int cut(int n, int[] prices) {
if(n == 1) {
//System.out.println("One one inch, no cut");
return prices[0];
} else if (intermidum.containsKey(n)) {
return intermidum.get(n);
} else {
int price = prices[n - 1];
int index = 0;
for(int i = 1; i < n; i++) {
int tmp = prices[i - 1] + cut(n - i, prices);
if(tmp > price) {
price = tmp;
index = i;
}
}
if(price == prices[n - 1]) {
//System.out.println("No cut for the "+ n +" inches.");
} else {
System.out.println("Cut to " + index + " and " + (n - index) + " inches.");
}
intermidum.put(n, price);
return price;
}
}
}
吐血归来,小帖一篇代码,恢复中。。。
本文提供了一个使用递归和缓存技术来解决最优切割问题的Java实现。通过动态规划的方法求解给定长度的杆子如何切割能获得最大价值,同时展示了具体的代码实现及运行时间。
629

被折叠的 条评论
为什么被折叠?



