Advertisement
TheAnshul

zrdbdrhbzr

Aug 16th, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.73 KB | None | 0 0
  1. /***************************************************************************
  2.  * #######                    #                                            *
  3.  *    #     #    #  ######   # #    #    #   ####   #    #  #    #  #      *
  4.  *    #     #    #  #       #   #   ##   #  #       #    #  #    #  #      *
  5.  *    #     ######  #####  #     #  # #  #   ####   ######  #    #  #      *
  6.  *    #     #    #  #      #######  #  # #       #  #    #  #    #  #      *
  7.  *    #     #    #  #      #     #  #   ##  #    #  #    #  #    #  #      *
  8.  *    #     #    #  ###### #     #  #    #   ####   #    #   ####   ###### *
  9.  ***************************************************************************/
  10. #include<bits/stdc++.h>
  11. #define ll          long long
  12. #define pb          push_back
  13. #define endl        '\n'
  14. #define pii         pair<ll int,ll int>
  15. #define vi          vector<ll int>
  16. #define all(a)      (a).begin(),(a).end()
  17. #define F           first
  18. #define S           second
  19. #define sz(x)       (ll int)x.size()
  20. #define hell        1000000007
  21. #define rep(i,a,b)  for(ll int i=a;i<b;i++)
  22. #define lbnd        lower_bound
  23. #define ubnd        upper_bound
  24. #define bs          binary_search
  25. #define mp          make_pair
  26. using namespace std;
  27. #define N  205
  28. ll dp[N][N];
  29. ll v[5*N];
  30. char p[5*N];
  31. ll func(ll i,ll j)
  32. {
  33.     if(dp[i][j]!=-1)
  34.         return dp[i][j];
  35.     ll val;
  36.     // mn=min(v[i-1]*v[i]*v[j]+func(i+1,j),v[i-1]*v[j-1]*v[j]+func(i,j-1));
  37.     ll mx=-hell;
  38.     if(p[i]=='+')
  39.         val=v[i]+func(i+1,j);
  40.     else
  41.         val=v[i]-func(i+1,j);
  42.     if(val>mx)
  43.         mx=val;
  44.     if(p[j-1]=='+')
  45.         val=func(i,j-1)+v[j];
  46.     else
  47.         val=func(i,j-1)-v[j];
  48.     if(val>mx)
  49.         mx=val;
  50.     rep(k,i+1,j)
  51.     {
  52.         if(p[k]=='+')
  53.             val=func(i,k)+func(k+1,j);
  54.         else
  55.             val=func(i,k)-func(k+1,j);
  56.         if(val>mx)
  57.             mx=val;
  58.         // val=v[i-1]*v[k-1]*v[j]+func(i,k-1)+func(k,j);
  59.         // if(val<mn)
  60.         //     mn=val;
  61.     }
  62.     dp[i][j]=mx;
  63.     return mx;
  64. }
  65. int main()
  66. {
  67.     ios_base::sync_with_stdio(false);
  68.     cin.tie(0);
  69.     cout.tie(0);
  70.     int TESTS=1;
  71.     cin>>TESTS;
  72.     while(TESTS--)
  73.     {
  74.         ll n;
  75.         cin>>n;
  76.         rep(i,0,2*n-1)
  77.         {
  78.             if(i&1)
  79.                 cin>>p[i/2];
  80.             else
  81.                 cin>>v[(i+1)/2];
  82.         }
  83.         rep(i,0,n)
  84.         {
  85.             rep(j,i,n)
  86.             {
  87.                 if(i==j)
  88.                     dp[i][j]=v[i];
  89.                 else if(j==i+1)
  90.                 {
  91.                     if(p[i]=='+')
  92.                     dp[i][j]=v[i]+v[i+1];
  93.                     else
  94.                     dp[i][j]=v[i]-v[i+1];
  95.                 }
  96.                 else
  97.                     dp[i][j]=-1;
  98.             }
  99.         }
  100.         cout<<func(0,n-1)<<endl;
  101.     }
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement