|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.05.2012, 02:39 | #1 |
Пользователь
Регистрация: 27.02.2010
Сообщений: 29
|
Билеты на мюзикл
За билетами на премьеру нового мюзикла собралась очередь из N лиц, каждое из которых хочет купить 1 билет. На всю очередь работала только одна касса, потому продажа билетов продвигалась очень медленно, от чего «клиенты» очереди впадали в отчаяние. Самые сообразительные быстро приметили, что, как правило, несколько билетов в одни руки кассир продает быстрее, чем когда эти же билеты продаются по одному. Поэтому они предложили нескольким людям, которые стоят рядом, отдавать деньги первому из них, чтобы он купил билеты на всех.
Но для борьбы со спекулянтами кассир продавала не больше 3-х билетов в одни руки, потому договориться таким образом между собой могли лишь 2 или 3 лица, которые стоят рядом. Известно, что на продажу і лицу из очереди одного билета кассир тратит Аі секунд, на продажу двух билетов – Ві секунд, трёх билетов – Сi секунд. Задание. Напишите программу, которая определит минимальное время, за которое можно было бы обслужить всех покупателей. Обратите внимание, что билеты на группу людей, которые объединились, всегда покупает первый из них. Также никто с целью ускорения не покупает лишние билеты (то есть билеты, которые никому не нужные). Входные данные. Первая строка входного файла содержит единственное число N – количество покупателей в очереди (1N5000). В каждой из следующих N строк записана тройка натуральных чисел Аі, Bi, Сi. Каждое из этих чисел не превышает 3600. Люди в очереди нумеруются, начиная от кассы Выходные данные. Исходный файл содержит одно число – минимальное время в секундах, за которое можно было бы обслужить всех покупателей. Пример входных и выходных данных Код:
Последний раз редактировалось Serge_Bliznykov; 08.05.2012 в 09:14. |
08.05.2012, 08:32 | #2 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Берешь целое от деления на три всех покупателей. Умножаешь на Ci - это общая масса людей, допустим Х. Затем берешь остаток от деления на три всех покупателей. Это будет либо 0, либо 1, либо 2. Соответственно если нуль, то ответ Х. Если 1 то Х+Ai, если 2 то X+Bi
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
08.05.2012, 09:24 | #3 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
А во-вторых, алгоритм КАТЕГОРИЧЕСКИ не подходит! потому как времея покупки одного (или двух) билетов может оказаться (как в примере 1) меньше, чем время покупки трёх билетов. Разберите пример номер 1 тут в цикле нужно брать тройку чисел и для неё находить минимальное время обработки. Потом, увеличивать индекс на число купленных билетов и повторять цикл. |
|
08.05.2012, 10:38 | #4 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Рекурсия до исчерпания очереди. На каждом шаге рекурсии ветвление на 3 - по возможном количеству билетов, проданных данному покупателю. |
|
08.05.2012, 12:14 | #5 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
08.05.2012, 17:46 | #6 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
|
09.05.2012, 16:23 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
про среднее значение - это была "утка"-шутка
а автор темы, наверное, молчит, потому что он получил решение на другом форуме - вот позволю себе процитировать чужое решение (с) valeriikozlov простое дп: Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Экзамен. Билеты. | DebianAmigo | Помощь студентам | 0 | 05.05.2011 20:56 |
Счастливые билеты (c++) | agent007 | Помощь студентам | 5 | 20.12.2010 11:30 |