【发布时间】:2018-11-12 22:27:56
【问题描述】:
我刚开始练习回溯和 DP 相关问题。我正在经历这个quora answer。关于酒瓶选择问题。我首先想编写一个代码来打印所有可能的选择酒瓶的方法。
问题陈述:
想象一下,你有一组 N 种葡萄酒并排放置在一个架子上。为简单起见,让我们分别用 1 到 N 的整数为葡萄酒站在货架上时从左到右编号。对于销售,您可以选择左边的一个或右边的一个。打印所有可能的方法,酒瓶可以卖吗?
我的代码如下。
public static void backtrackWineAll(List<Integer> priceList, List<Integer> choosen) {
if(priceList.isEmpty()) {
System.out.println(choosen);
}
else {
Integer first = priceList.remove(0);
choosen.add(first);//choose the first bottle.
backtrackWineAll(priceList, choosen);
choosen.remove(choosen.size()-1);
priceList.add(0, first);
int lastPos = priceList.size()-1;
Integer last = priceList.remove(lastPos);
choosen.add(last); //choose the last bottle.
backtrackWineAll(priceList, choosen);
choosen.remove(choosen.size()-1);
priceList.add(last);
}
}
它不工作。它正在打印两次结果。有人可以指出出了什么问题吗?
关于如何处理 DP 问题有什么建议吗?
谢谢。
【问题讨论】:
-
是的,阅读标记为“动态编程”的 Stack Overflow 问题 :)
标签: java dynamic-programming backtracking