Advertisement
jeff69

Untitled

Aug 12th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. #define sc(a) scanf("%d",&a)
  5. #define F(x) -1*(x==')')+(x=='(')
  6. string a,b;
  7. int dp[2501][2501],MD=1e9+7, n,m,prea[2502],preb[2502];
  8. struct InterleavingParenthesis
  9. {
  10.     public:
  11.  
  12. int solve(int s,int d)
  13. {
  14.     int bal = prea[s]+preb[d];
  15.     if(s==n&&d==m){
  16.             return (bal==0);
  17.     }
  18.     int & ans = dp[s][d];
  19.     if(ans!=-1)return ans;
  20.     ans =0;
  21.  
  22.     if(bal>0&&s<n&&a[s]==')')
  23.         ans+=solve(s+1,d);
  24.     ans%=MD;
  25.     if(bal>0&&d<m&&b[d]==')')
  26.         ans+=solve(s,d+1);
  27.         ans%=MD;
  28.     if(a[s]=='('&&s<n)
  29.         ans+=solve(s+1,d);
  30.     ans%=MD;
  31.     if(b[d]=='('&&d<m)
  32.        ans+=solve(s,d+1);
  33.     ans%=MD;
  34.     return ans;
  35. }
  36. int countways(string s1,string s2)
  37. {
  38.     memset(dp,-1,sizeof dp);
  39.     a=s1,b=s2;
  40.     n=a.size(),m=b.size();
  41.     for(int i=0;i<n;i++)
  42.         prea[i+1]=prea[i]+F(a[i]);
  43.     for(int i=0;i<m;i++)
  44.         preb[i+1]=preb[i]+F(b[i]);
  45.  
  46.     return solve(0,0);
  47. }
  48. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement