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

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

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

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

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

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

\[
\text{{remainder}} = n
\]

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

\[
\text{{min_cost}} = \infty
\]

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

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

\[
\text{{remainder}} = n - (\text{{цена билета a}} \times \text{{a_count}} + \text{{цена билета b}} \times \text{{b_count}} + \text{{цена билета c}} \times \text{{c_count}} + \text{{цена билета d}} \times \text{{d_count}})
\]

\[
\text{{total_cost}} = \text{{цена билета a}} \times \text{{a_count}} + \text{{цена билета b}} \times \text{{b_count}} + \text{{цена билета c}} \times \text{{c_count}} + \text{{цена билета d}} \times \text{{d_count}}
\]

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

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

\[
\text{{min_cost}} = \text{{total_cost}}
\]
\[
\text{{лучшее a_count}} = \text{{a_count}}, \text{{лучшее b_count}} = \text{{b_count}}, \text{{лучшее c_count}} = \text{{c_count}}, \text{{лучшее d_count}} = \text{{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 - входное число.