资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
有一个N x N的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以从一个格子走到它右边或下边的格子里。请问如何走才能拿到最多的金币。
输入格式
第一行输入一个正整数n。
以下n行描述该方格。金币数保证是不超过1000的正整数。
输出格式
最多能拿金币数量。
代码:(主要难点在与考虑边界)
#include<bits/stdc++.h>
using namespace std;
int main(){
int N; cin>>N;
int dp[N][N];
for (int i=0; i<N; i++){
for (int j=0; j<N; j++){
int data; cin>>data;
dp[i][j] = data;
}
}
for (int i=0; i<N; i++){
for (int j=0; j<N; j++){
if(i-1<0 && j-1<0) dp[i][j] = dp[i][j];
else if(i-1<0 && j-1>=0) dp[i][j] = dp[i][j] + dp[i][j-1];
else if(i-1>=0 && j-1<0) dp[i][j] = dp[i][j] + dp[i-1][j];
else dp[i][j] = max(dp[i][j] + dp[i-1][j], dp[i][j] + dp[i][j-1]);
}
}
cout<<dp[N-1][N-1];
return 0;