Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define pb push_back
- #define inf INFINITY
- #define mp make_pair
- using namespace std;
- typedef long long ll;
- const int MAX = 1e6 + 10;
- const int MIN = 1e3 + 10;
- const int MAXI = INT_MAX;
- const int MAXL = 1e17 + 10;
- int dp[MIN][MIN][2], arr[MAX];
- int n;
- int bt (int l, int r, bool t) {
- if (l == r)
- return t ? arr[l] : 0;
- if (dp[l][r][t] != -1) return dp[l][r][t];
- int ret = 0;
- int a,b;
- a=b=0;
- if (t)
- ret += max(bt(l + 1, r, 0) + arr[l], bt(l, r - 1, 0) + arr[r]);
- else
- {
- a=bt(l + 1, r, 1)+arr[l];
- b=bt(l, r - 1, 1)+arr[r];
- ret += max(a,b);
- }
- if(!t)
- {
- if(a>b)ret-=arr[l];
- else ret-=arr[r];
- }
- dp[l][r][t] = ret;
- return ret;
- }
- int main ()
- {
- cin >> n;
- for (int i = 1; i <= n; i++)
- cin >> arr[i];
- memset(dp, -1, sizeof(dp));
- int ans = bt(2, n, 0) + arr[1];
- ans = max(ans, bt(1, n - 1, 0) + arr[n]);
- cout << ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement