Числа в круглых скобках говядины (DP)

Ссылки: 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

рекомендация

отwww.cnblogs.com/letlifestop/p/10974541.html