Может кто-нибудь объяснить один из алгоритмов, который решает эту проблему Google Code Jam? - PullRequest
2 голосов
/ 19 января 2011

Я имею в виду Проблема плана покупок из "Практических задач". Вот ссылка на страницу с решениями .

1 Ответ

2 голосов
/ 19 января 2011

Не смотря на решения, это выглядит как стандарт 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 представляется как битовая маска, а не как фактический список.

Вам также необходимо учитывать скоропортящиеся продукты, но это чисто технический вопрос.

Наконец, вам нужно либо применить памятка о рекурсии или перезаписи как чистого DP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...