Typical DP Contest B ゲーム
方針
すぬけ君は得られる得点を最大化しようとして、すめけ君はすぬけ君の得られる得点を最小化しようとする。
min-max探索をメモ化すればいい。
ソースコード
int A, B, a[1000], b[1000], dp[1001][1001]; void chmax(int &a, int b){ if(a == -inf || a < b) a = b; } int rec(int i, int j, int k){ int &res = dp[i][j]; if(res != -inf) return res; if(k == 1){ res = inf; if(i < A) res = min(res, rec(i+1, j, 0)); if(j < B) res = min(res, rec(i, j+1, 0)); } else{ if(i < A) res = max(res, rec(i+1, j, 1) + a[i]); if(j < B) res = max(res, rec(i, j+1, 1) + b[j]); } return res; } int main(){ cin >> A >> B; rep(i, A) cin >> a[i]; rep(i, B) cin >> b[i]; rep(i, A+1) rep(j, B+1) dp[i][j] = -inf; dp[A][B] = 0; cout << rec(0, 0, 0) << endl; return 0; }