我需要在java中开发一个程序,我需要计算给定项目的最小费用。
每件商品的标准价格如下: 洋葱 - Rs.5 番茄 - Rs.10 马铃薯 - Rs.2
还有一个列表包含不同的商品交易。一件商品可以有多笔交易。
2洋葱 - Rs.7.5
3洋葱 - 10卢比
3番茄 - Rs.25
5番茄--Rs.45
3马铃薯 - Rs.5
4马铃薯 - 卢比。 6.5
它可以有更多。 因此,该方法需要以这样的方式计算账单金额:对于任何给定的数量(考虑给定的交易),它应该给出最小的账单金额。
输入将采用以下格式程序应计算要支付的最低金额: -
洋葱,西红柿,洋葱,马铃薯,番茄,洋葱,洋葱
(4)onion -> (10+5)
(2)tomato -> (10*2)
(1)potato -> 2
------------------
minimum bill -> 37
我有两个班,一个叫蔬菜和蔬菜。其他名为Deal的如下
public class Deal {
private String code;
private String quantity;
private String price;
//getters & setters
}
public class Vegetable{
private String code;
private String name;
private String price;
//getters & setters
}
答案 0 :(得分:0)
确实这是knapsack problem。只需将总数视为背包的体积,将1除以每个项目的价格作为其值。
示例:
(4)洋葱 - > W = 4
项目:
2洋葱 - Rs.7.5 - > w = 2,值= 1 / 7.5
3洋葱 - 10卢比 - > w = 3,值= 1/10
注意:分别为每个项目解决此问题。
顺便说一下,互联网上有许多源代码,如this,但我建议你先试试自己。答案 1 :(得分:0)
我不打算为你做整件事,但这就是这个算法的样子:
public int getPrice(int code)
{
int price = getVegetableBasePrice(code);
Iterator<Deal> it = deals.iterator();
while(it.hasNext())
{
Deal next = it.next();
if(next.getCode() == code)
{
price = Math.min(price, deal.getPrice());
}
}
return price;
}
一次计算所有项目的所有价格会好得多,因为当你可以用线性时间实现这个时,这将导致多项式时间复杂度。这取决于你需要算法有多好。