Ссылки: https://ac.nowcoder.com/acm/problem/21652
Источник: Крупный рогатый скот-офф сеть
Название Описание
Телец недавно начал изучать тянуть соответствие открывающей скобки
Дай вам две скобки последовательности, не гарантирует законное, спросить, сколько различных способов могут быть объединены в последовательность двух скобок легитимной последовательности скобка
Время слияния не может изменить свою первоначальную последовательность заказа
Введите описание:
Состоит из двух линий двух строк S1, S2
1 ≤ |. S1 |, | S2 | ≤ 2500
Выход Описание:
Вывести число, по модулю 1e9 + 7
Конкретные идеи:
DP [I] [J] обозначает г-го и J-го числа в «(» отношение «») до нескольких предпосылке перед первой строки символов второй вариант; этот процесс требует дополнительного массива открытия используемого этот процесс записи.
А затем взрыв памяти, дерутся, как прокатный массив.
MLE код:
1 #pragma комментарий (линкер "/ СТЕКА: 102400000,102400000") 2 #include <. Бит / STDC ++ H> 3 с использованием пространства имен STD; 4 # определить LL длинные длинные 5 # определить инф 0x3f3f3f3f 6 # определить ll_inf (1LL << 60 ) 7 # определить lson л, в середине, РТ << 1 8 # определяют rson середины + 1 , г, к.т. << 1 | 1 9 Const INT maxn = 2500 + 10 ; 10 Const INT N = 15; 11 константные INT мод = 1e9 + 7 ; 12 LL дп [maxn] [maxn]; 13 INT предварительно [maxn] [maxn]; 14 символ str1 [maxn], str2 [maxn]; 15 INT основных () 16 { 17 зсапЕ ( " % s " , str1 + 1 ); 18 зсапЕ ( " % s " , str2 + 1 ); 19 INT len1 = StrLen (str1 + 1 ); 20 INT len2 = StrLen (str2 + 1 ); 21 дп [0 ] [ 0 ] = 1 ; 22 для ( INT I = 0 ; я <= len1; я ++ ) 23 { 24 для ( Int J = 0 , J <= len2; j ++ ) 25 { 26 , если (я && J!!) Продолжать ; 27 , если (J!) Предварительно [я] [J] = предварительно [i- 1 ] [J] + (str1 [я] == ' ( ' ? 1 : - 1 ); 28 еще предварительно [я] [J] = предварительно [I] [j - 1 ] + (str2 [J] == '( ' ? 1. : - . 1 ); 29 ПЧ (предварительно [I] [J] < 0 ) // если первая строка символов перед г-го и j-й второй строки , прежде чем выкапывать меньше , чем 0, незаконное 30 Продолжить ; 31 ПЧ (I) , 32 ДП [I] , [J] + DP = [I - 1. ] [Дж]; 33 ПЧ (J) , 34 ДП [I] , [J] + DP = [I] , [J- . 1 ]; 35 ДП [I] , [J] , % = MOD; 36 } 37 [ } 38 Е ( " % ДНУ \ n- " , предварительно [len1] [len2] == 0 DP [len1] [len2] ?:0 ); 39 возвращения 0 ; 40 }
AC код:
1 #pragma комментарий (линкер "/ СТЕКА: 102400000,102400000") 2 #include <. Бит / STDC ++ H> 3 с использованием пространства имен STD; 4 # определить LL длинные длинные 5 # определить инф 0x3f3f3f3f 6 # определить ll_inf (1LL << 60 ) 7 # определить lson л, в середине, РТ << 1 8 # определяют rson середины + 1 , г, к.т. << 1 | 1 9 Const INT maxn = 2500 + 10 ; 10 Const INT N = 15; 11 константные INT мод = 1e9 + 7 ; 12 INT дп [ 3 ] [maxn]; 13 INT до [ 3 ] [maxn]; 14 символ str1 [maxn], str2 [maxn]; 15 INT основных () 16 { 17 зсапЕ ( " % s " , str1 + 1 ); 18 зсапЕ ( " % s " , str2 + 1 ); 19 INT len1 = StrLen (str1 + 1 ); 20 INT len2 = StrLen (str2 +1 ); 21 INT текущ = 0 ; 22 дп [текущ] [ 0 ] = 1 ; 23 для ( INT I = 0 ; я <= len1; я ++ ) 24 { 25 , если (я) 26 { 27 текущ ^ = 1 ; 28 MemSet (дп [текущ], 0 , SizeOf (дп [текущ])); 29 } 30 // предварительно [I] [0] = 31 для ( INT J = 0; J <= len2; j ++ ) 32 { 33 , если (я &&! J) 34 продолжить ; 35 , если (! К) 36 до [дворняжка] [у] = до [дворняжка ^ 1 ] [J] + (str1 [я] == ' ( ' ? 1 : - 1 ); 37 еще 38 до [дворняжка] [ J] = [предварительно CUR] [j - 1 ] + (str2 [J] == ' ( ' ? 1 : - 1 ); 39 , если (предварительно [текущ] [J] < 0 ) 40 продолжают; 41 , если (я) 42 дп [текущ] [J] + = дп [текущ ^ 1 ] [J]; 43 , если (J) 44 дп [текущ] [J] + = дп [текущ] [j - 1 ]; 45 дп [текущ] [J] =% по модулю; 46 } 47 } 48 Е ( " % d \ п " , предварительно [текущ] [len2] == 0 дп [текущ] [len2]: 0 ); 49 возвращения 0 ; 50 }
Обучение Веб - сайт: https://blog.csdn.net/j2_o2/article/details/87971817#commentBox