Ссылка: https: //codeforces.com/contest/1288/problem/C
C. Два Массивы
Смысл проблем: Принимая во внимание ряд н и ряд м, сконструированы таким образом два массива а и Ь удовлетворяют условию, значение всех элементов в массиве между 1 ~ п, а и Ь длина массива м .. 2. а массивы монотонно убывает, Ь массив 3 не увеличивается монотонно произвольное положение я, есть я <В = Я
Идея: Вы можете сделать сочетание математики, может также дп дп следующее является практика. Во- первых, если а, б сливаются в две массивы . 1 , А 2 , А . 3 , ....... A м , B м , B м-. 1 , В м-2 , B м. 3- ... б ........ 3 , б 2 , б 1, могли бы найти , что число столбцов не монотонно убывает, то мы можем сделать дп,
DP [I] [J] обозначает я-й позиции может быть увеличена до числа программ, равных у, то уравнение переноса является дп [I] [J] = дп [I-1] [J] + дп [I] [J + 1]
AC код:
1 #include <iostream> 2 #include <cstdio> 3 #include <CString> 4 #include <Алгоритм> 5 #include <вектор> 6 # include <очереди> 7 с использованием пространства имен STD; 8 ЬурейеЕ долго долго LL; 9 Const INT MAXM = 12 ; 10 Const INT maxn = 1e3 + 5 ; 11 Const INT мод = 1e9 + 7 ; 12 LL дп [MAXM * 2 ] [maxn]; 13 ИНТОсновной () { 14 INT п, м; 15 зсапЕ ( " % d% d " , & п, & м); 16 для ( Int I = 1 ; я <= п; я ++) дп [ 1 ] [I] = 1 ; 17 для ( Int I = 2 , я <= 2 * м; я ++ ) { 18 для ( INT J = п; J> = 1 ; j-- ) { 19 дп [I] [J] = (дп [я] [J + 1 ] + дп [i - 1 ] [J])% мод; 20 } 21 } 22 LL ANS = 0 ; 23 для ( Int I = 1 ; я <= п; я ++ ) { 24 ANS = (ANS + дп [ 2 * м] [I])% мод; 25 } 26 Е ( " % d " , ANS); 27 возвращения 0 ; 28 }