资源限制
时间限制:1.0s 内存限制:256.0MB
**@[TOC](问题描述)**
有一个N x N的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以从一个格子走到它右边或下边的格子里。请问如何走才能拿到最多的金币。
**@[TOC](输入格式)**
第一行输入一个正整数n。
以下n行描述该方格。金币数保证是不超过1000的正整数。
**@[TOC](输出格式)**
最多能拿金币数量。
**@[TOC](样例输入)**
3
1 3 3
2 2 2
3 1 2
**@[TOC](样例输出)**
11
**@[TOC](数据规模和约定)**
n<=1000
简单的dp问题 看代码就行了
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10010;
int m[N][N],res;
int main(){
int n;
cin>>n;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j ++){
cin>>m[i][j];
}
}
m[0][1] = m[1][0] = 0;
for(int i = 1;i <= n;i ++){
for(int j = 1;j <= n;j ++){
m[i][j] = max(m[i][j] + m[i-1][j],m[i][j-1] + m[i][j]);
}
}
for(int i = 1;i <= n;i ++){
res = max(m[n][i],res);
}
cout<<res;
return 0;
}