Раздел «Язык Си».Dynamic:

Динамическое программирование для основных групп

Условия задач на динамическое программирование для основных групп

Черепаха

http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=656&chapterid=2965

В левом верхнем углу прямоугольной таблицы размером N×M находится черепашка. В каждой клетке таблицы записано некоторое число. Черепашка может перемещаться вправо или вниз, при этом маршрут черепашки заканчивается в правом нижнем углу таблицы.

Подсчитаем сумму чисел, записанных в клетках, через которую проползла черепашка (включая начальную и конечную клетку). Найдите наибольшее возможное значение этой суммы.

Формат входных данных

В первой строке входных данных записаны два натуральных числа N и M, не превосходящих 100 — размеры таблицы. Далее идет N строк, каждая из которых содержит M чисел, разделенных пробелами — описание таблицы. Все числа в клетках таблицы целые и могут принимать значения от 0 до 100.

Формат выходных данных

Программа должна вывести единственное число: максимальную возможную стоимость маршрута черепашки.

Input Output
3 4
1 1 2 1
2 2 1 1
2 1 2 1
9

Маршрут черепашки

http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=656&chapterid=2966

В левом верхнем углу прямоугольной таблицы размером N×M находится черепашка. В каждой клетке таблицы записано некоторое число. Черепашка может перемещаться вправо или вниз, при этом маршрут черепашки заканчивается в правом нижнем углу таблицы.

Подсчитаем сумму чисел, записанных в клетках, через которую проползла черепашка (включая начальную и конечную клетку). Найдите наибольшее возможное значение этой суммы.

Формат входных данных

В первой строке входных данных записаны два натуральных числа N и M, не превосходящих 100 — размеры таблицы. Далее идет N строк, каждая из которых содержит M чисел, разделенных пробелами — описание таблицы. Все числа в клетках таблицы целые и могут принимать значения от 0 до 100.

Формат выходных данных

Первая строка выходных данных содержит максимальную возможную сумму, вторая – маршрут, на котором достигается эта сумма. Маршрут выводится в виде последовательности, которая должна содержать N-1 букву D, означающую передвижение вниз и M-1 букву R, означающую передвижение направо. Если таких последовательностей несколько, необходимо вывести ровно одну (любую) из них.

Input Output
3 4
1 1 2 1
2 2 1 1
2 1 2 1
9
D R D R R

Взрывоопасность

http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=654&chapterid=913

При переработке радиоактивных материалов образуются отходы двух видов — особо опасные (тип A) и неопасные (тип B). Для их хранения используются одинаковые контейнеры. После помещения отходов в контейнеры последние укладываются вертикальной стопкой. Стопка считается взрывоопасной, если в ней подряд идет более одного контейнера типа A. Для заданного количества контейнеров N определить число безопасных стопок.

Формат входных данных Одно число 1 ≤ N ≤ 20.

Формат выходных данных Одно число — количество безопасных вариантов формирования стопки.

Пример:

Input Output
2 3

Взрывоопасность-2

http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=654&chapterid=914

При переработке радиоактивных материалов образуются отходы трех видов — особо опасные (тип A), неопасные (тип B) и совсем не опасные (тип C). Для их хранения используются одинаковые контейнеры. После помещения отходов в контейнеры последние укладываются вертикальной стопкой. Стопка считается взрывоопасной, если в ней подряд идет более одного контейнера типа A. Для заданного количества контейнеров N определить число безопасных стопок.

Формат входных данных Одно число 1 ≤ N ≤ 20.

Формат выходных данных Одно число — количество безопасных вариантов формирования стопки.

Пример:

Input Output
2 8

Без трех единиц

http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=654&chapterid=912

Определите количество последовательностей из нулей и единиц длины N (длина - это общее количество нулей и едииниц), в которых никакие три единицы не стоят рядом.

Формат входных данных Одно число 1 ≤ N ≤ 40.

Формат выходных данных Выведите количество искомых последовательностей. Гарантируется, что ответ не превосходит 231 − 1.

Пример:

Input Output
2 7

Подсказка: Рассмотрим последовательности длины N, на первом месте может стоять 0, таких будет f(N-1), при подстановке 1, второе может быть 0, таких будет f(N-2), и 1,таких f(N-3). Так как трех единиц не может быть, по условию, просто просуммируем полученные значения до нужного N, записывая каждый в массив: f[n] = f[n-1] + f[n-2] + f[n-3]; Ответ будет находиться в f[n];

Калькулятор

http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=654&chapterid=2963

Имеется калькулятор, который выполняет три операции:

  1. Прибавить к числу X единицу.
  2. Умножить число X на 2.
  3. Умножить число X на 3.

Определите, какое наименьшее число операций необходимо для того, чтобы получить из числа 1 заданное число N. Формат входных данных Одно число 1 ≤ N ≤ 106.

Формат выходных данных Одно число: наименьшее количество искомых операций.

Пример:

Input Output
1
5 3
562340 19

Подсказка: Предположим в массиве a[i] при i<N лежит для каждого i минимальное количество операций, которым можно это i получить из 1. Вычислим a[N].

Калькулятор с восстановлением ответа

http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=654&chapterid=2968

Имеется калькулятор, который выполняет три операции:

  1. Прибавить к числу X единицу.
  2. Умножить число X на 2.
  3. Умножить число X на 3.

Определите, какое наименьшее число операций необходимо для того, чтобы получить из числа 1 заданное число N. Формат входных данных Одно число 1 ≤ N ≤ 106.

Формат выходных данных Выведите строку, состоящую из цифр "1", "2" или "3", обозначающих одну из трех указанных операций, которая получает из числа 1 число N за минимальное число операций. Если возможных минимальных решений несколько, выведите любое из них.

Пример:

Input Output
1  
5 121
562340 3333312222122213312

Подсказка: Предположим в массиве a[i] при i<N лежит для каждого i минимальное количество операций, которым можно это i получить из 1. Вычислим a[N].

Теперь пойдем обратным ходом от a[N] к a[1], занося в массив b[] какую операцию применять (1, 2 или 3). Напечатаем запомненные в b числа в обратном порядке.

Последовательность из 0 и 1 длины N

Выведите все последовательности из 0 и 1 длины N.

Формат входных данных Одно число 1 ≤ N ≤ 10.

Формат выходных данных Последовательности из 0 и 1, по одной последовательности на строку, от наименьшей к наибольшей.

Пример:

Input Output
3 000
001
010
011
100
101
110
111

Последовательность из 0 и 1 длины N без двух единиц подряд

Выведите все последовательности из 0 и 1 длины N, в которых нет двух подряд идущих единиц.

Формат входных данных Одно число 1 ≤ N ≤ 10.

Формат выходных данных Последовательности из 0 и 1, по одной последовательности на строку, от наименьшей к наибольшей.

Пример:

Input Output
3 000
001
010
100
101

LCS Longest Common Subsequence (наибольшая общая подпоследовательность)

* Algorithms.LongestCommonSubsequenceCPP -- TatyanaDerbysheva - 16 Feb 2012