jeff69

brackets sequence dp

Jan 19th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.80 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int MX=3e3+5;
  4. typedef long long ll;
  5. int dp[MX][MX],n;
  6. int solve(int O,int C)
  7. {
  8.     if(O+C==n)return C==O;
  9.     int& ans=dp[O][C];
  10.     if(ans!=-1)return ans;
  11.     ans=0;
  12.     if(O>C)ans+=solve(O,C+1);
  13.     ans+=solve(O+1,C);
  14.     return ans;
  15. }
  16. string ans;
  17. void findall(int O,int C)
  18. {
  19.     if(O+C==n)
  20.     {
  21.         cout<<ans<<'\n';
  22.         return;
  23.     }
  24.     if(solve(O+1,C)>0)
  25.     {
  26.         ans.push_back('(');
  27.         findall(O+1,C);
  28.         ans.pop_back();
  29.     }
  30.     if(O>C&&solve(O,C+1)>0)
  31.     {
  32.         ans.push_back(')');
  33.         findall(O,C+1);
  34.         ans.pop_back();
  35.     }
  36.  
  37. }
  38. int main()
  39. {
  40.  
  41.     while(cin>>n)
  42.     {
  43.      memset(dp,-1,sizeof dp);
  44.         cout<<solve(0,0)<<'\n';
  45.         findall(0,0);
  46.     }
  47.     return 0;
  48. }
Add Comment
Please, Sign In to add comment