Bekzhan

Untitled

Apr 12th, 2017
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3.  
  4. using namespace std;
  5.  
  6. const int MAXN = 110;
  7.  
  8. int n;
  9. int a[MAXN];
  10. int sum[MAXN];
  11.  
  12. bool calced[MAXN][MAXN];
  13. int dp[MAXN][MAXN];
  14.  
  15. int S(int l, int r) {
  16.     return sum[r] - sum[l - 1];
  17. }
  18.  
  19. int calc(int l, int r) {
  20.     if (calced[l][r]) {
  21.         return dp[l][r];
  22.     }
  23.  
  24.     calced[l][r] = true;
  25.     int& ans = dp[l][r];
  26.  
  27.     if (l == r) {
  28.         return ans = a[l];
  29.     }
  30.  
  31.     int ansl = S(l + 1, r) - calc(l + 1, r) + a[l];
  32.     int ansr = S(l, r - 1) - calc(l, r - 1) + a[r];
  33.  
  34.     return ans = max(ansl, ansr);
  35. }
  36.  
  37. int main() {
  38.     freopen("input.txt", "r", stdin);
  39.     freopen("output.txt", "w", stdout);
  40.  
  41.     cin >> n;
  42.     for (int i = 1; i <= n; i++) {
  43.         cin >> a[i];
  44.         sum[i] = a[i] + sum[i - 1];
  45.     }
  46.  
  47.     cout << calc(1, n) << endl;
  48.  
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment