Сколько билетов каждого вида пассажир должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше
Сколько билетов каждого вида пассажир должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше 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 - входное число.