// UVa 10891 - Game of Sum
#include <iostream>
#include <string.h>
using namespace std;
#define integer signed long long int
integer oo[1];
int main() {
memset(oo, 127, sizeof(oo));
int n;
while (cin >> n && n) {
// input
integer s[101];
s[0] = 0;
for (int i = 1; i <= n; i++) {
cin >> s[i];
s[i] += s[i - 1];
}
// DP
integer T[102][102];
memset(T, 0, sizeof(T));
for (int d = 0; d < n; d++) {
for (int i = 1; i <= n - d; i++) {
int j = i + d;
integer best = -oo[0];
for (int k = i; k <= j; k++) {
// take from i to k
if (s[k] - s[i - 1] - T[k + 1][j] > best)
best = s[k] - s[i - 1] - T[k + 1][j];
// take from k to j
if (s[j] - s[k - 1] - T[i][k - 1] > best)
best = s[j] - s[k - 1] - T[i][k - 1];
}
T[i][j] = best;
}
}
cout << T[1][n] << endl;
}
return 0;
}
Tuesday, October 6, 2015
UVa 10891 - Game of Sum
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment