#include #include #include #include using namespace std; typedef vector VI; typedef pair PII; struct Key { int lo, hi, p; Key(int lo, int hi, int p) : lo(lo), hi(hi), p(p) {} bool operator < (const Key &o) const { if (lo != o.lo) return lo < o.lo; if (hi != o.hi) return hi < o.hi; return p < o.p; } }; typedef map MKI; MKI cache; int solve(VI &cards, int lo, int hi, int player) { if (lo > hi) return 0; Key key(lo, hi, player); if (cache.count(key)) return cache[key]; int best; if (player == 0) { best = max(-solve(cards, lo + 1, hi, 1) + cards[lo], -solve(cards, lo, hi - 1, 1) + cards[hi]); } else { if (cards[lo] >= cards[hi]) best = -solve(cards, lo + 1, hi, 0) + cards[lo]; else best = -solve(cards, lo, hi - 1, 0) + cards[hi]; } return cache[key] = best; } int main(void) { for (int casei = 1; ; ++casei) { cache.clear(); int n; cin >> n; if (n == 0) break; VI cards; while (n--) { int x; cin >> x; cards.push_back(x); } int result = solve(cards, 0, cards.size() - 1, 0); cout << "In game " << casei << ", the greedy strategy might lose by as many as " << result << " points." << endl; } }