解题思路
这是一道典型的动态规划题,我们需要从上往下、从左往右遍历每一个元素,比较当前元素的左边元素和上边元素的大小(无则视为0),然后将较大元素值与当前元素值相加赋给当前元素,即此操作后当前元素为走到当前位置可以拿到的最大金币数量,遍历完每一元素后即可得到答案。
代码
#include <iostream>
using namespace std;
int map[1005][1005] = {0};
int main()
{
int n = 0;
cin >> n;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> map[i][j];
if (map[i - 1][j] > map[i][j - 1])
{
map[i][j] += map[i - 1][j];
}
else
{
map[i][j] += map[i][j - 1];
}
}
}
cout << map[n][n] << endl;
return 0;
}