Рубрики
Без рубрики

Лецкод сентября день 14

Проблема – вы профессиональный грабитель, планирующий грабить дома по улице. У каждого дома есть CE … Теги с Python, информатики.

Проблема –

Вы профессиональный грабитель, планирующий грабить дома по улице. Каждый дом имеет определенное количество денег, замеченных денег, единственное ограничение, останавливая вас от ограбления каждого из них, заключается в том, что примыкающие дома имеют соединение системы безопасности, и она автоматически свяжется с полицией, если два соседних дома были разбиты в ту же ночь.

Учитывая список неотрицательных целых чисел, представляющих сумму денег каждого дома, определить максимальную сумму денег, которую вы можете грабить сегодня без предупреждения полиции

Пример = “” “вход: nums = [1,2,3,1] Выход: 4 Объяснение: грабить дом 1), а затем грабить дом 3). Общая сумма вы можете +. ” «Интуиция – один подход может быть жадным точком.

Однако мы можем пропустить здесь некоторые случаи, так как мы не знаем, какие ценности лежат в будущем. Рассмотрим следующий сценарий – [2,4,8,40] Если мы жадным, мы выберем 8. Но если мы выберем 4, мы сможем выбрать 40, а результат будет 44. Итак, жадный не будет работать здесь. Нам нужно перечислить все возможности/состояния. Итак, мы сделаем это. И мы будем использовать мемузаризацию, чтобы уменьшить сложность времени. И поскольку мы используем мемузаризацию, мы срок его как решение DP. Решение –

class Solution:
    def rob(self, nums: List[int]) -> int:
        cache = {}
        def dp(idx):
            if idx < 0:
                return 0
            else:
                res = cache.get(idx, None)
                if res is not None:
                    return res
                else:
                    res = max(dp(idx-1), dp(idx-2) + nums[idx])
                    cache[idx] = res
                    return res
        return dp(len(nums)-1)

Оригинал: “https://dev.to/skbhagat40/leetcode-september-day14-19oi”