重み付けされた N*N グリッド W が与えられます。2 台のロボット r1、r2 がそれぞれ左上隅と右上隅から開始します。R1 は右下隅に到達し、R2 は左下隅に到達する必要があります。有効な動きは次のとおりです。
- R1 は 1 マス下に移動し、R2 は 1 マス左に移動します。
- R1 は 1 マス右に移動し、R2 は 1 マス下に移動します。
それらは、訪問する正方形 (開始および終了の正方形を含む) の重みの合計が最大になるように移動する必要があります。
たとえば、グリッドが次の場合:
6 0 3 1 7 4 2 4 3 3 2 8 13 10 1 4
この例では、以下に示すように、R1 が * でマークされたパスをたどり、R2 が ^ でマークされたパスをたどると、合計スコアは 56 になります。
6* 0 3^ -1^ 7* 4*^ 2^ 4 -3 3*^ -2* 8* 13^ 10^ -1 -4*
これが、このグリッドで達成できる最高の総合スコアであることを確認できます。
N <= 2500 であり、制限時間は 2 秒であるため、再帰によってこれを解決することはできません。
問題にロボットが 1 つしかない場合は、動的計画法を使用してこれを解決できます。
この問題に対して同様のアプローチを使用してみました。
2 つの追加の N*N グリッド G1、G2、
for i from 1 to N:
for j from 1 to N and K from N down to 1:
if (G1[i-1][j] + G2[i][k+1]) > (G1[i][j-1] + G2[i-1][k]):
G1[i][j] = G1[i-1][j] + W[i][j]
G2[i][k] = G2[i][k+1] + W[i][k]
else:
G1[i][j] = G1[i][j-1] + W[i][j]
G2[i][k] = G2[i-1][k] + W[i][k]
return G1[N][N] + G2[N][1]
しかし、これは間違った答えになります。アルゴリズムの何が問題なのか理解できません。各正方形について、そこに到達するための最大加重パスを計算しているためです。
私の方法の何が問題なのか、正しい答えを得るためにどのように修正すればよいのか、誰か教えてもらえますか?