Advertisement
jeff69

Untitled

Sep 19th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
4CS 1.06 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define pb push_back
  3. #define inf INFINITY
  4. #define mp make_pair
  5.  
  6. using namespace std;
  7. typedef long long ll;
  8. const int MAX = 1e6 + 10;
  9. const int MIN = 1e3 + 10;
  10. const int MAXI = INT_MAX;
  11. const int MAXL = 1e17 + 10;
  12.  
  13. int dp[MIN][MIN][2], arr[MAX];
  14. int n;
  15.  
  16. int bt (int l, int r, bool t) {
  17.     if (l == r)
  18.         return t ? arr[l] : 0;
  19.     if (dp[l][r][t] != -1) return dp[l][r][t];
  20.     int ret = 0;
  21.     int a,b;
  22.     a=b=0;
  23.     if (t)
  24.         ret += max(bt(l + 1, r, 0) + arr[l], bt(l, r - 1, 0) + arr[r]);
  25.     else
  26.        {
  27.              a=bt(l + 1, r, 1)+arr[l];
  28.              b=bt(l, r - 1, 1)+arr[r];
  29.            ret += max(a,b);
  30.        }
  31.         if(!t)
  32.         {
  33.             if(a>b)ret-=arr[l];
  34.             else ret-=arr[r];
  35.         }
  36.     dp[l][r][t] = ret;
  37.     return ret;
  38. }
  39.  
  40. int main ()
  41. {
  42.     cin >> n;
  43.     for (int i = 1; i <= n; i++)
  44.         cin >> arr[i];
  45.     memset(dp, -1, sizeof(dp));
  46.     int ans = bt(2, n, 0) + arr[1];
  47.     ans = max(ans, bt(1, n - 1, 0) + arr[n]);
  48.     cout << ans << endl;
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement