有人可以解释一种解决此Google Code Jam问题的算法吗?

时间:2011-01-19 12:45:55

标签: algorithm

我指的是练习题中的Shopping Plan problem。这是指向the solutions page的链接。

1 个答案:

答案 0 :(得分:2)

如果不查看解决方案,这似乎是标准DP

每个州都有待购买的商品列表(2^15组合)和汽车的当前位置(50商店+ 1原始位置= 51可能的选择)。

从一个州过渡到另一个州很容易。

def minCost(itemsLeft, currentPosition)
    current_minimum = INFINITY

    for (each store in the list) {
        if (store.containsSomeOf(itemsLeft)) {
            candidate = minCost(itemsLeft - store.items, store)  
                     + cost_of_items_bought_at_store + cost_of_driving
            current_minimum = min(current_minimum, candidate)
        }
    }

    return current_minimum
end

当然,itemList表示为位掩码,而不是实际列表。

你也需要考虑易腐物品,但这纯粹是技术性的。

最后,您需要将memoization应用于递归或将其重写为纯DP。