Я решаю задачу по созданию алгоритма.
Есть игра земли.Игра Land of Landing состоит из 4 рядов в общей сложности N рядов с оценками во всех столбцах.Отступая от первого ряда вниз на один ряд, вы должны ступить на один из четырех квадратов каждого ряда.
Однако существует специальное правило, которое нельзя повторить в одном ряду при посадке одного ряда ввремя.
Например,
|1 |2 |3 |5 |
|5 |6 |7 |8 |
|4 |3 |2 |1 |
Если вы перешли со строки 1 по строку 4 (5), вы не можете перейти по строке 4 (8) в строку 2.
Я пытался использовать динамическое программирование вJava.
import java.lang.Math;
import java.util.*;
class Solution {
int [][] dp = new int[100001][4];
int solution(int[][] land) {
int r = land.length;
for (int i = 0; i < 4; i++)
{
dp[0][i] = land[0][i];
}
for (int i = 0; i <r; i++)
{
for (int j = 0; j < 4; ++j)
{
for(int k = 0; k < 4; ++k)
{
if (j != k)
{
dp[i][j] = Math.max(dp[i][j], land[i][j] + dp[i-1][k]);
}
}
}
}
int ans = 0;
for (int i = 0; i < 4; ++i)
{
ans = Math.max(ans, dp[r-1][i]);
}
return ans;
}
}
показывает ошибку
java.lang.ArrayIndexOutOfBoundsException: -1
Я думал, что это, вероятно, что-то не так сУсловное утверждение.
В C ++ эти условные операторы верны.Это работает отлично.Почему я получаю ошибку в Java?Есть ли разница в использовании массива между Java и C ++?
Подскажите, пожалуйста, как я могу решить эту ошибку?