function collectCoins(coins) {
const m = coins.length;
const n = coins[0].length;
// 定义状态数组dp,初始化dp[0][0]为起点的硬币数量
const dp = Array.from({ length: m }, () => Array(n).fill(0));
dp[0][0] = coins[0][0];
// 计算第一行和第一列的最大硬币数量
for (let i = 1; i < m; i++) {
dp[i][0] = dp[i-1][0] + coins[i][0];
}
for (let j = 1; j < n; j++) {
dp[0][j] = dp[0][j-1] + coins[0][j];
}
// 填表计算dp数组
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]) + coins[i][j];
}
}
// 返回右下角位置的最大硬币数量
return dp[m-1][n-1];
}