Official

D - Game in Momotetsu World Editorial by QCFium


まず、上から \(i\) 行目、左から \(j\) 列目のマスに駒がある場合、次に操作するのは \((i + j)\) が偶数なら高橋君であり、奇数なら青木君です。
以下のような整数の \(2\) 次元配列 \(\mathrm{opt}\) を考えます。

\(\mathrm{opt}[i][j]\) :

  • \((i + j)\)偶数の場合 : 上から \(i\) 行目、左から \(j\) 列目に駒がある状態から、高橋君先手でゲームを開始した場合に、最終的な \((\) 高橋君の得点\() - (\) 青木君の得点 \()\)最大値
  • \((i + j)\)奇数の場合 : 上から \(i\) 行目、左から \(j\) 列目に駒がある状態から、青木君先手でゲームを開始した場合に、最終的な \((\) 高橋君の得点\() - (\) 青木君の得点 \()\)最小値

\(f(i, j) = (A_{i, j}\)+ なら \(1\)- なら \(-1)\) とすると、\(\mathrm{opt}\) は以下の式を満たします。

  • \((i + j)\)偶数の場合 : \(\mathrm{opt}[i][j] = \max(\mathrm{opt}[i + 1][j] + f(i + 1, j), \mathrm{opt}[i][j + 1] + f(i, j + 1))\)
  • \((i + j)\)奇数の場合 : \(\mathrm{opt}[i][j] = \min(\mathrm{opt}[i + 1][j] - f(i + 1, j), \mathrm{opt}[i][j + 1] - f(i, j + 1))\)

つまり、\((i, j)\) の降順に \(\mathrm{opt}\) を計算することができます。
ただし、上記はマス目の外側を参照する可能性を考慮していないので、マス目の外側は計算に入れない処理をする必要があります。
最終的に \(\mathrm{opt}[1][1]\) の正負でゲームの結果が分かります。

posted:
last update: