Writeln(kMax);
End.
Еще пример задания: Дан целочисленный квадратный массив 10 х 10. Опишите на русском языке или на одном из языков программирования алгоритм вычисления суммы максимальных элементов из каждой строки. Напечатать значение этой суммы. Предполагается, что в каждой строке такой элемент единственный. Решение: 1) суть задачи: среди элементов каждой строки нужно выбрать максимальный, и все эти выбранные значения сложить 2) несложно сразу написать алгоритм на русском языке: 3) сначала напишем программу на псевдокоде: const N=10; { ввод матрицы N на N } Sum:= 0; for i:=1 to N do begin { max:= максимальный элемент в i-ой строке } Sum:= Sum + max; End; 4) остается записать на Паскале те части, которые взяты в фигурные скобки, и до конца оформить программу; по правилам ЕГЭ можно не писать в программе команды для ввода массива, поэтому мы оставим на этом месте комментарий: const N=10; var A: array[1..N,1..N] of integer; i, k, max, Sum: integer; Begin { ввод матрицы N на N } Sum:= 0; for i:=1 to N do begin max:= A[i,1]; for k:=2 to N do if A[i,k] > max then max:= A[i,k]; Sum:= Sum + max; End; Writeln(Sum); End.
C3 (высокий уровень, время – 30 мин) Тема: Динамическое программирование. Что нужно знать: · динамическое программирование – это способ решения сложных задач путем сведения их к более простым задачам того же типа · с помощью динамического программирования решаются задачи, которые требуют полного перебор вариантов: o «подсчитайте количество вариантов…» o «как оптимально распределить…» o «найдите оптимальный маршрут…» · динамическое программирование позволяет ускорить выполнение программы за счет использования дополнительной памяти; полный перебор не требуется, поскольку запоминаются решения всех задач с меньшими значениями параметров Пример задания: Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 3, а во второй 4 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или удваивает число камней в какой-то куче или добавляет 4 камня в какую-то кучу. Игрок, после хода которого общее число камней в двух кучах становится больше 25, проигрывает. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте. Решение [‡‡‡]: 1) Введем обозначения: х-первая куча, у-вторая куча. Старт: (х,у). Варианты хода игроков: (х*2,у), (х,у*2), (х+4,у), (х, у+4). Игрок проиграет, когда число камней в 2-х кучах станет 25 (х+у=25). Изобразим ход игры в виде дерева решений. Необходимо разветвить дерево до того момента, когда все варианты последнего хода станут проигрышными. 2) На дереве изображены все возможные варианты ходов. Одним цветом в строке подчёркнуты одинаковые значения количества камней в кучах. По ходу игры будем разветвлять только разные координаты. 3) 4) После первых 3 -х ходов дерево будет выглядеть так: 5) Когда 1 -й игрок совершает 3 -й ход, он проигрывает, когда (х,у) равны: 24,4, 3,32, 3,24, 28,4, 22,4 т.к. сумма х и у в этих случаях больше 25. На рисунке проигрышные позиции 1 -го игрока выделены сплошной рамкой: 6) Каждый игрок играет безошибочно, поэтому 1 -й игрок не пойдет в проигрышную позицию. Позиции: 24,4, 3,32, 3,24, 28,4, 22,4 разветвлять не будем. 7) Найдем в последней строке позиции, где сумма х и у близка к 25 -и. При прибавлении 4 -х количество камней увеличится минимум на 4. Поэтому позиции, где х+у принадлежит [22,25], на следующем ходу дадут только проигрыш при любом ходе игрока. Это правило касается тех позиций, где х и у больше 3 -х (если х или у равны 3 -м, то х+у принадлежит [23,25]). Найдем такие позиции: 6,16, 20,4, 7,16, 14,8, 18,4. На следующем рисунке они выделены розовым. Эти позиции на 4 -м ходу разветвлять не будем. На рисунке проигрышные позиции 2 -го игрока выделены сплошной рамкой. 8) В последней строке видно, что минимальное значение х и у равно 4 -м, поэтому позиции, где х+у принадлежит [22,25] на следующем ходу дадут только проигрыш при любом ходе игрока. На рисунке они выделены розовым в последней строке (4 -й ход): На 5 -м ходу получаются только проигрышные позиции (символом "П" обозначены проигрышные позиции). Поэтому 1 -й игрок проигрывает. Выигрывает 2 -й игрок. 9) Найдем выигрышные позиции 2 -го игрока на 4 -м ходе. Это те позиции, что выделены розовым на 4 -м ходе. Рассмотрим позиции 2 -го игрока на 2 -м ходе. 10) Если 2-й игрок пойдет в позицию 3,16, то при ходе 1 -го игрока в позицию 6,16 или 7,16 на 3 -м ходе 2 -й игрок не может попасть в свои выигрышные позиции на 4 -м ходе. 11) Если 2-й игрок пойдет в позицию 10,4, то при ходе 1 -го игрока в позицию 20,4 на 3 -м ходе 2 -й игрок не может попасть в свои выигрышные позиции на 4-м ходе. 12) Если 2 -й игрок пойдет в позицию 6,8, то при ходе 1 -го игрока в позицию 6,16 на 3 -м ходе 2 -й игрок не может попасть в свои выигрышные позиции на 4 -м ходе. 13) Если 2 -й игрок пойдет в позицию 7,8, то при ходе 1 -го игрока в позицию 14,8 или 7,16 на 3 -м ходе 2 -й игрок не может попасть в свои выигрышные позиции на 4-м ходе. 14) Если 2-й игрок пойдет в позицию 14,4, то при ходе 1 -го игрока в позицию 14,8 или 18,4 на 3 -м ходе 2 -й игрок не может попасть в свои выигрышные позиции на 4-м ходе. 15) 16) Представим решение также в виде таблицы[§§§] (выигрышные ходы выделены и подчеркнуты пунктирной линией):
17) Получается, выигрывает 2-й игрок Еще пример задания: У исполнителя Утроитель две команды, которым присвоены номера:
|