Мы, учитывая взвешенную сетку N*N W. Два робота r1, r2 запускаются с левых верхних и правых верхних углов соответственно. R1 должен достигнуть к правому нижнему и R2 левых нижних углов. Вот действительные шаги.
- R1 спускает один квадрат, R2, перемещает один покинутый квадрат.
- R1 перемещает одно квадратное право, R2, спускает один квадрат.
Они должны двинуться таким способом, которым суммой весов площадей они посещают (включая старт, и окончание квадрата) максимизируется.
Для Примеров, если сетка:
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*
Это может быть проверено, что это - лучший объединенный счет, который может быть достигнут для этой сетки.
We cannot solve this by recursion as N <= 2500 and the time limit is 2 seconds.
If the problem had only one robot, we could solve this by using dynamic programming.
Я пытался использовать аналогичный подход для этой проблемы;
We have two extra N*N grids 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]
но это дает неправильный ответ.
Я не в состоянии понять что не так с моим алгоритмом, потому что для каждого квадрата он вычисляет макс. взвешенный путь, чтобы достигнуть там.
Кто-либо может сказать мне что не так с моим методом и как я могу исправить его, чтобы получить правильный ответ?