Вступить в клуб →
средняявопросРекурсия и динамическое программирование

Размен монетами: почему порядок вложенных циклов меняет ответ

Считаем, сколькими способами набрать сумму 5 монетами номиналов 1, 2 и 5 (монет каждого номинала неограниченно).

coins = [1, 2, 5]
target = 5
dp = [0] * (target + 1)
dp[0] = 1

for c in coins:
    for s in range(c, target + 1):
        dp[s] += dp[s - c]

print(dp[target])

Что напечатает код и что изменится, если поменять циклы местами (внешний по суммам, внутренний по монетам)?

  • Напечатает 4; перестановка циклов ничего не изменит, ведь сложение коммутативно
  • Напечатает 9; внешний цикл по монетам как раз считает упорядоченные последовательности
  • Напечатает 4; после перестановки получится 9 — это уже упорядоченные последовательности
  • Напечатает 4; после перестановки останется 4, изменится только порядок обновления массива dp

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела