๐ก ํฌ๊ธฐ๊ฐ Y+1,X+1์ธ dp๋ฐฐ์ด์ ๋ง๋ค์ด์ฃผ๊ณ dp[1][1]๋ถํฐ ์ฐจ๋ก๋๋ก ํ์์น๊น์ง์ ์ฌํ ์ต๋๊ฐ์ ๊ตฌํด์ค๋ค.
๐ก dp[i][j]์ ์ด์ ์์น๋ dp[i-1][j],dp[i][j-1],dp[i-1][j-1]์ด๋ค. ์ด ์ค ์ต๋๊ฐ์ ๊ณ ๋ฅด๊ณ ํ์์น์ ์ฌํ ๊ฐ์(input[i-1][j-1])๋ฅผ ๋ํด์ฃผ๋ฉด dp[i][j]์ ๊ฐ์ด ๋๋ค.
๐ก dpํฌ๊ธฐ๋ฅผ Y+1, X+1๋ก ํด์ค ์ด์ ๋ 0์ผ๋ก ์ฑ์ ๋ฏธ๋ก๋ฅผ ๋ฒ์ด๋ฌ์ ๊ฒฝ์ฐ๋ฅผ ์ฝ๊ฒํด์ฃผ๊ธฐ ์ํด์์ด๋ค.
์ฝ๋
const fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const [Y, X] = input.shift().split(" ").map(Number);
input = input.map((item) => item.split(" ").map(Number));
const dp = Array.from(new Array(Y + 1), () => new Array(X + 1).fill(0));
for (let i = 1; i < Y+1; i++) {
for (let j = 1; j < X+1; j++) {
dp[i][j] =
Math.max(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + input[i-1][j-1];
}
}
console.log(dp[Y][X]);