最小消费途径

时间:2015-03-24 17:48:45

标签: algorithm dynamic-programming brute-force

假设有150张优惠券被消费 在每次迭代中有3种方法可以消耗它们 - 一次15个,每次1个或每次恰好一半 显然,优惠券只能全部消费 我们需要找出优惠券下降到0的最短路径(迭代次数) 蛮力是唯一的出路吗? 或者我们有一个算法来解决这种情况。

1 个答案:

答案 0 :(得分:0)

这可以通过遵循递归公式在Dynamic Programming (DP)中解决:

D(x) = INFINITY x < 0
D(0) = 0
D(x) = min{ D(x-1), D(x-15), D(x/2) } + 1

在自下而上的DP中,它将类似于:(伪代码)

D = new int[151]
D[0] = 0
for (int i = 1; i <151; i++) {
   best = min(D[i-1], D[i/2]) //add floor or ceil according to definition of problem to i/2
   if (i >= 15): 
      best = min(best, D[i-15])  
   D[i] = best + 1
}
return D[150]