我对编码知之甚少,但了解基本的Python。 我想通过编写一个能够解决下一个问题的程序来挑战自己 - 考虑到商店给你3个选项 - 每天X $,每月Y $或Z $,如果我想要T的时间,这个组合对我来说是最好的吗?
现在,据我所知,我在这里有一个基本的组合问题,用于创建组合树,需要一些最短路径算法(Djikstra,Bellman-Ford ......?)来寻找最佳选择(" Shortests","更便宜")
请帮助我找到解决此问题的方法。
答案 0 :(得分:0)
这是多项knapsack problem的实例,其中您的时间是权重,“值”是成本。您的背包大小是您想要的时间量。在这里,您希望最小化该值,这相当于最大化负数(假设一天“成本-X,月-Y,年-Z)。
这可以通过以下递归公式解决(假设成本是整数或可以是整数),并且可以使用Dynamic Programming相当有效地实现。
D(0,0) = 0
D(x,0) = INFINITY x>0
D(x,i) = INFINITY x < 0
D(x,i) = min{ D(x,i-1), D(x-time[i],i) + cost[i] }
编辑:请注意,这不是最短路径问题的实例(不是直接),因为你对路径有限制,你想要找到一个需要M天的路径,而最短路径算法会遇到这样的限制