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