Динамическое программирование
Набрать сумму монетками
Даны номиналы монет $1 \le a_i \le 10^9$ при $1 \le i \le 20$, и дана сумма $1 \le N \le 10^9$. Определить, какое минимальное число монет необходимо, чтобы набрать ими указанную сумму. Например, если даны номиналы монет в $a_1=2$, $a_2=3$, $a_3=10$, то набрать сумму $N=7$ можно тремя монетами: $7 = 3 + 2 + 2$, а сумму $N = 21$ оптимально можно набрать пятью: $21 = 10 + 3 + 3 + 3 + 2$.
В задаче будет три варианта по возрастанию сложности. По заданному набору номиналов монет и сумме необходимо:
- определить только, можно ли эту сумму набрать;
- определить минимальное необходимое количество монет;
- определить и минимальное необходимое количество монет, и перечислить сами монеты.
Формат входного и выходного файла
В первой строке файла дано число $k$ — количество различных номиналов монет.
В следующих $k$ строках даны числа $a_i$. В последней строке находится число $N$.
Пример из условия будет указан так (файл 1.in
):
3
2
3
10
21
В выходной файл необходимо вывести, в зависимости от уровня сложности:
- слова
YES
илиNO
, в зависимости от того, можно ли набрать указанную сумму. - одно число — минимальное необходимое количество монет для набора суммы, или
-1
, если это невозможно. - В первой строке число, как в прошлом пункте, после этого в каждой строке по количеству монет соответствующего номинала.
В предлагаемых тестах есть разные файлы для проверки ответа, вы должны использовать тот, который соответствует уровню сложности, для которого вы решали. Например, если вы в своей программе определяете только, можно ли набрать сумму, используйте файл с расширением .possible.out
, а если вы решили более сложную версию задачи, этот файл вам не нужен.
- Файл
1.possible.out
:YES
- Файл
1.how-many.out
:5
- Файл
1.full-answer.out
:5 1 3 1
Он означает, что необходимо минимум пять монет для набора суммы, при этом монет номинала $a_1=2$ требуется взять 1 штуку, монет номинала $a_2=3$ нужно 3 штуки, монет номинала $a_3=10$~— одна штука.
Наибольшая возрастающая подпоследовательность
Разбор задачи о наибольшей возрастающей подпоследовательности
Дана последовательность целых чисел, во входном файле сначала указано количество ее элементов, потом построчно перечислены сами элементы, например,
8
6
10
2
5
9
7
8
3
В данной задаче максимальная возрастающая подпоследовательность имеется в виду из тех, которые возрастают строго, т.е. каждый очередной элемент строго больше предыдущих. Необходимо вывести, в зависимости от уровня сложности задачи, который вы решаете,
- Длину максимальной возрастающей подпоследовательности.
4
- Длины максимальной возрастающей подпоследовательности, а потом в каждой строке по одному элементу
4 2 5 7 8