2008,
TCHS, Весна, Раунд 1, Кофейная (TaliluluCoffee)
В университете Таилулу имеется
кофейня. Все посетители прибывают в момент времени 0. На обслуживание одного
посетителя требуется одна секунда. Первого посетителя начинают обслуживать в
секунду 0. Если i - ый посетитель
обслуживается в t - ую секунду, то он
платит tips[i]
– t чаевых. Если значение tips[i] – t отрицательно, то i - ый посетитель ничего не платит. Массив tips описывает размеры
чаевых всех посетителей. Найти наибольшую сумму чаевых, которую можно
заработать.
Класс: TaliluluCoffee
Метод: int
maxTip(vector<int> tips)
Ограничения:
tips содержит от 0 до 50 элементов, 0 £ tips[i] £ 100000.
Вход. Массив tips, описывающий размеры чаевых посетителей.
Выход. Наибольшая сумма чаевых, которую
можно заработать.
Пример входа
tips |
{3, 3, 3, 3} |
{7, 8, 6, 9, 10} |
{1, 1, 1, 1, 2} |
Пример выхода
6
30
2
РЕШЕНИЕ
жадный алгоритм
Начинать обслуживание следует с
тех посетителей, которые больше платят. Отсортируем посетителей в убывающем
порядке их размеров чаевых. Проходим по отсортированному массиву tips, суммируя
в переменной res размеры чаевых.
ПРОГРАММА
#include <cstdio>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
class TaliluluCoffee
{
public:
int
maxTip(vector<int> tips)
{
int i,res;
sort(tips.begin(),tips.end(),greater<int>());
for(res=i=0;i<tips.size();i++)
if (tips[i]-i > 0) res = res +
tips[i]-i;
return res;
}
};