Решите задачу по алгебре До 268
268
года до нашей эры в Древнем Риме было шесть основных монет:

Унция (монета номиналом 1
1
унция)
Секстанс (монета номиналом 2
2
унции)
Квадранс (монета номиналом 3
3
унции)
Триенс (монета номиналом 4
4
унции)
Семис (монета номиналом 6
6
унций)
Асс (монета номиналом 12
12
унций)
Однажды римлянин Луций взял с собой по две монеты каждого из шести номиналов (всего —

12
12
монет) и отправился на рынок. Сколькими способами он сможет без сдачи оплатить своими монетами покупку стоимостью 47
47
унций? Монеты одного номинала считайте одинаковыми.

20 Окт 2023 в 19:40
53 +1
0
Ответы
1

Для решения данной задачи можем воспользоваться методом динамического программирования.

Создадим массив dp размером 48 (сумма покупки Луция плюс один) и заполним его нулями. dp[0] установим равным 1 (так как способ оплаты нулевой суммы - это не платить вообще).

Далее пройдемся по каждой монете и для каждого номинала обновим значения dp[j], при j от i до 47, как dp[j] + dp[j - номинал], таким образом учитывая варианты оплаты с учетом каждой монеты.

После завершения всех итераций значение dp[47] будет содержать количество способов оплатить покупку на 47 унций без сдачи.

Программная реализация на Python:

dp = [0] * 48
dp[0] = 1
coins = [1, 2, 3, 4, 6, 12]
for coin in coins:
for i in range(coin, 48):
dp[i] += dp[i - coin]
print(dp[47])

После запуска данной программы получим ответ: 34001 способ оплатить покупку на 47 унций без сдачи монетами Луция.

16 Апр 2024 в 15:53
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир