Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- const int nmax = 5011, base = 1e9 + 7;
- int n;
- int f[nmax][nmax][2];
- char A[nmax];
- int dp(int i, int d, int ok){
- if (i == n) return d==0;
- auto &r = f[i][d][ok];
- if (r != -1) return r;
- r = 0;
- for (char c : {'(', ')'}){
- if ((c <= A[i] || ok) && (d > 0 || c == '('))
- r += dp(i+1, d + (c=='('?1:-1), ok || c < A[i]);
- }
- r %= base;
- return r;
- }
- int32_t main(){
- scanf("%s", A);
- n = strlen(A);
- memset(f,255,sizeof(f));
- cout << dp(0, 0, 0);
- }
Add Comment
Please, Sign In to add comment