Сколько билетов каждого вида пассажир должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше

  • 3
Сколько билетов каждого вида пассажир должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше n, а общая стоимость приобретенных билетов была минимальной? Входные данные: вводится одно натуральное число n, которое не превышает 10000. Выходные данные: программа должна вывести пять целых чисел, которые представляют количество билетов каждого вида.
Amina_2677
62
Для решения данной задачи нам потребуется использовать метод динамического программирования. Давайте пошагово разберемся с постановкой задачи и ее решением.

Предположим, что у нас есть четыре вида билетов: a, b, c и d, соответственно. Наша задача состоит в том, чтобы определить количество билетов каждого вида, которое необходимо купить, чтобы сумма оплаченных поездок была не меньше n, а общая стоимость билетов была минимальной.

Для начала создадим переменные a_count, b_count, c_count, d_count, которые будут представлять количество билетов каждого вида. Изначально, мы инициализируем их значением 0.

Теперь перейдем к решению задачи пошагово:

Шаг 1: Создаем переменную remainder и присваиваем ей значение n. Эта переменная будет представлять оставшуюся сумму, которую мы должны заплатить за поездки.

{remainder}=n

Шаг 2: Создаем переменную min_cost и присваиваем ей бесконечное значение. Эта переменная будет представлять минимальную стоимость приобретенных билетов.

{min_cost}=

Шаг 3: Запускаем цикл со значениями от 0 до n{цена билета a} для переменной a_count, от 0 до n{цена билета b} для переменной b_count, от 0 до n{цена билета c} для переменной c_count и от 0 до n{цена билета d} для переменной d_count.

Шаг 4: Внутри цикла вычисляем оставшуюся сумму remainder после покупки a_count билетов типа a, b_count билетов типа b, c_count билетов типа c и d_count билетов типа d. Также вычисляем суммарную стоимость этих билетов.

{remainder}=n({цена билета a}×{a_count}+{цена билета b}×{b_count}+{цена билета c}×{c_count}+{цена билета d}×{d_count})

{total_cost}={цена билета a}×{a_count}+{цена билета b}×{b_count}+{цена билета c}×{c_count}+{цена билета d}×{d_count}

Шаг 5: Если remainder меньше 0, то прерываем текущую итерацию цикла и переходим к следующей итерации.

Шаг 6: Если total_cost меньше min_cost, то обновляем значения min_cost и a_count, b_count, c_count, d_count.

{min_cost}={total_cost}
{лучшее a_count}={a_count},{лучшее b_count}={b_count},{лучшее c_count}={c_count},{лучшее d_count}={d_count}

Шаг 7: После завершения цикла выводим значения лучших a_count, b_count, c_count, d_count.

Например, если у нас были билеты следующих типов:
- a_count: 3
- b_count: 2
- c_count: 1
- d_count: 0

То ответ будет:
3 2 1 0

Таким образом, мы определили количество билетов каждого вида таким образом, чтобы суммарное количество оплаченных поездок было не меньше n, а общая стоимость приобретенных билетов была минимальной.

Данный алгоритм имеет временную сложность O(n), где n - входное число.