Викушка111111
23.05.2020 04:58

Python! Покупка билетов За билетами на премьеру нового мюзикла выстроилась очередь из N человек, каждый из которых хочет купить 1 билет. На всю очередь работала только одна касса, поэтому продажа билетов шла очень медленно, приводя «постояльцев» очереди в отчаяние. Самые сообразительные быстро заметили, что, как правило, несколько билетов в одни руки кассир продаёт быстрее, чем когда эти же билеты продаются по одному. Поэтому они предложили нескольким подряд стоящим людям отдавать деньги первому из них, чтобы он купил билеты на всех.

Однако для борьбы со спекулянтами кассир продавала не более 3 билетов в одни руки, поэтому договориться таким образом между собой могли лишь 2 или 3 подряд стоящих человека.

Известно, что на продажу i-му человеку из очереди одного билета кассир тратит Ai секунд, на продажу двух билетов — Bi секунд, трёх билетов — Ci секунд. Напишите программу, которая подсчитает минимальное время, за которое могли быть обслужены все покупатели.

Обратите внимание, что билеты на группу объединившихся людей всегда покупает первый из них. Также никто в целях ускорения не покупает лишних билетов (то есть билетов, которые никому не нужны).

Входные данные

На вход программы поступает сначала число N — количество покупателей в очереди (1≤N≤5000). Далее идут N троек натуральных чисел Ai, Bi, Ci. Каждое из этих чисел не превышает 3600. Люди в очереди нумеруются, начиная от кассы.

Выходные данные

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

Примеры

Ввод

5
5 10 15
2 10 15
5 5 5
20 20 1
20 1 1

Вывод

12

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Roman2321
05.09.2021 12:13
// PascalABC.NET 3.1, сборка 1230 от 27.04.2016
const
  КолСтрок=3;
  КолСтолбцов=5;
begin
  var Массив: array [1..КолСтрок,1..КолСтолбцов] of integer;
  var СуммыПоСтрокам: array[1..КолСтолбцов] of integer;
  Writeln('Введите элементы массива (',КолСтрок,',',
    КолСтолбцов,') построчно:');
  for var строка:=1 to КолСтрок do
    for var столбец:=1 to КолСтолбцов do begin
      Read(Массив[строка,столбец]);
      СуммыПоСтрокам[строка]+=Массив[строка,столбец]
      end;
  Writeln('Суммы построчно:');
  for var строка:=1 to КолСтрок do Print(СуммыПоСтрокам[строка])
end.

Тестовое решение
Введите элементы массива (3,5) построчно:
7 -5 13 19 -11
8 23 -15 -6 0
12 -6 -9 0 12
Суммы построчно:
23 10 9
0,0(0 оценок)
Ответ:
sairma
23.06.2022 04:36
1. Короткий современный вариант ("один оператор")

// PascalABC.NET 3.1, сборка 1230 от 27.04.2016
begin
  Writeln('Sпол.неч = ',ArrRandom(50,-10,20).Println
    .Where((x,i)->(x>0) and (i.IsEven)).Sum)
end.

Тестовое решение
15 16 0 17 20 7 -3 -4 9 9 -3 -8 14 10 10 11 7 18 -8 8 0 15 1 4 11 1 9 -10 -7 -7 12 17 8 13 7 15 1 13 12 11 4 -5 -3 -6 -5 -10 -9 -8 8 -8
Sпол.неч = 148

2. Длинный "школьный" вариант ("почувствуйте разницу")

// PascalABC.NET 3.1, сборка 1230 от 27.04.2016
var
  a:array[1..50] of integer;
  i,s:integer;
begin
  Randomize;
  s:=0;
  for i:=1 to 50 do begin
    a[i]:=Random(31)-10; Write(a[i],' ');
    if (a[i]>0) and Odd(i) then s:=s+a[i]
    end;
  Writeln;
  Writeln('Sпол.неч = ',s)
end.

Тестовое решение
4 14 4 7 9 -4 3 6 20 -10 3 -3 15 12 9 0 3 12 13 -1 9 -2 -2 16 18 -2 5 9 17 -3 4 -6 10 10 -5 10 8 13 12 15 13 1 12 1 7 6 9 2 -9 -6
Sпол.неч = 207
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота