Изменить: Похоже, мой код такой же, как и ваш ... В общем, у меня 547. Максимальное значение будет solution[A.length-1][A.length-1]
.
.
Оригинальный ответ: Вот что я получил, используя javascript (547) - я уверен, что вы можете «перевести» его на любой язык по вашему выбору:
var inputArray=[
[-45, 87, -43, -12, 3, -39, -61, -19],
[ 97, -64, 79, -75, 19, 97, 80, 12],
[-24, -62, 46, 97, -75, -45, 92, 69],
[ 87, -31, 74, 33, -49, 1, 27, 95],
[ 13, -82, -19, 14, -76, 95, 64, -33],
[-25, 45, -61, 90, -90, 43, 32, 96],
[-27, 38, 77, -42, 36, 71, 32, 30],
[ 27, -52, -66, -78, -42, 66, 69, -11]
];
console.log(JSON.stringify(inputArray));
var maxArray=[];
for(var i=0; i<inputArray.length; i++) {
maxArray[i]=[];
for(var j=0; j<inputArray.length; j++) {
maxArray[i][j]=0;
}
}
console.log(JSON.stringify(maxArray));
maxArray[0][0]=inputArray[0][0];
for(var i=1; i<inputArray.length; i++) {
maxArray[0][i]=maxArray[0][i-1]+inputArray[0][i];
maxArray[i][0]=maxArray[i-1][0]+inputArray[i][0];
}
console.log(JSON.stringify(maxArray));
for(var i=1; i<inputArray.length; i++) {
for(var j=1; j<inputArray.length; j++) {
maxArray[i][j]=Math.max(maxArray[i-1][j], maxArray[i][j-1]) + inputArray[i][j];
}
}
console.log(JSON.stringify(maxArray));
var max=maxArray[inputArray.length-1][inputArray.length-1];
console.log("Max="+max);
Я использовал console.table
вместо console.log(JSON.stringify
, но сниппет его не поддерживает. Я записал результаты каждого шага. Сначала я создал массив такой же размерности, заполненный нулями. Затем я скопировал значение первого столбца / строки. Затем я заполнил оставшуюся часть первой строки и первого столбца, добавив inputArray
и значения влево / вверх. Затем я заполнил оставшуюся часть матрицы, добавив inputArray
и max left / up. Последний столбец содержит максимальные значения, если вы go справа, а последняя строка - снизу. Самый дальний угол будет абсолютным максимумом - и я это зарегистрировал.