公式
D - Game in Momotetsu World 解説
by
D - Game in Momotetsu World 解説
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]\) の正負でゲームの結果が分かります。
投稿日時:
最終更新: