Привет всем. Подскажите, как можно данную задачу более менее эффективно

решить?

В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарошки, пюрешка и греча. К гарнирам, конечно же, полагается горячее. Горячих блюд тоже три (ну и совпадение!) — сосиски, котлетки и кура. На раздаче сегодня стоит добрая повариха Алевтина Мстиславовна. Она немного ленива, но очень любит заводчан, вот перед ней и встала задача.

Итак, для начала поведаем вам прописные истины: макарошки лучше сочетать с сосисками, пюрешку с котлетками, а гречу с курой. Человек, у которого на обед одно из этих трёх сочетаний, будет счастливым, в противном случае счастливым он не будет.

На раздаче в очередь выстроились n заводчан. По очереди они будут подходить к Алевтине и называть ей гарнир, который они хотят. У Алевтины на раздаче будут все три гарнира, а также одно из горячих блюд. Заводчанину она будет выдавать гарнир, который он хочет, а также то горячее которое сейчас на раздаче. Кроме того, за всё время Алевтина готова не более чем k раз сходить в Горячий Цех и заменить горячее блюдо на раздаче на любое другое. Естественно, в начале она вольна принести на раздачу любое горячее блюдо, которое захочется.

Алевтина дружит со всеми заводчанами и уже заранее знает кому какой гарнир хочется. Всей информацией она поделилась с Вами. Алевтина добра душой и хочет, чтобы как можно больше заводчан были счастливы благодаря сочетанию гарнира и горячего. Ваша задача — сказать какое наибольшее число заводчан могут оказаться счастливыми при заданном ограничении на число замен горячего блюда на раздаче. Не подведите Алевтину!

В первой строке входных даны целые числа n и k (1⩽n⩽105, 0⩽k⩽20). В следующих n строках даны предпочтения по гарнирам в том порядке, в котором заводчане стоят в очереди, по одному на строке. Предпочтение описано одним из трёх символов: «M», «P» или «G» — макарошки, пюрешка или гречка соответственно.

Выведите какое наибольшее число заводчан будут счастливыми после обеда.

------------------------------

Примеры:
5 1
M
M
G
M
P
-> 4

Написал решение в лоб с использованием всех размещений с повторениями букв M, P, G. Но это очень неэффективно по времени

6 ответов

131 просмотр

Тут дп dp[i][j][k] = v. сколько людей покушало, сколько перестановок горячего сделано, какое горячее сейчас стоит на раздаче, сколько было довольных

Vitaliy- Автор вопроса
Антон Novikov
Тут дп dp[i][j][k] = v. сколько людей покушало, ск...

Сколько измерений получается? Я в дп не силен если честно.. Можете пожалуйста более подробно объяснить?

Vitaliy
Сколько измерений получается? Я в дп не силен если...

Измерений дп - 3. Асимптотика времени работы - O(n*k*3)

Vitaliy- Автор вопроса
Антон Novikov
Измерений дп - 3. Асимптотика времени работы - O(n...

Получается максимизируем количество довольных. Целевая формула F(i, j, k). k - количество смен блюд, а i и j?

Vitaliy
Получается максимизируем количество довольных. Цел...

i - кол-во людей, которые успели пройти по очереди и что-то себе взять, j - кол-во смен блюд, k - текущее горячее блюдо, которое стоит на раздаче, v - кол-во довольных полученной едой людей

Антон Novikov
i - кол-во людей, которые успели пройти по очереди...

Если i-тый человек хочет гарнир x, dp[i][j][k] = max(dp[i-1][j][k] + 1 или dp[i-1][j-1][y(y!=x)] + 1 (в зависимости от k==x), dp[i-1][j][k])

Похожие вопросы

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много раз подряд, после чего из ...
Αλeksandr
10
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Всем привет Есть задача про интервалы - https://ejudge.lksh.ru/archive/2014/12/Ccpp/day01/01.pdf?ysclid=lhaombs4s4535475456 Думал как решить задачу быстрее, чем за квадрат, но...
Αλeksandr
18
Карта сайта