田鼠MIUMIU来到了一片农田,农田可以看成是一个M*N个方格的矩阵。每个方格里放有一定的粮食。 MIUMIU看到这里,兴奋不已,它要拿走多多的粮食,以备过冬。但MIUMIU要么往前走(向右) , 要么往下走。 但它很聪明,一定会找到一条拿走最多粮食的路径。 MIUMIU目前在入口位置, 坐标为(1,1),出口位置在坐标(M,N)。 请你编程,计算一下当MIUMIU走出农田时,最多能拿走多少粮食。 Input 第一行: M N ( 1≤M ,N ≤50 ) 接下来有M行, 每行有N个整数,分别表示方格中的粮食数 0≤ Aij≤100 (i=1,..M, j=1,…N) (所有的数之间有一个空格) Output 一个整数,表示MIUMIU能拿走的最多粮食数。 Sample Input 4 3 5 3 7 5 3 2 5 5 5 6 2 5 Sample Output 30
思路:典型动态规划题,dp即可;
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=51;
int dp[maxn][maxn];
int a[maxn][maxn];
int main()
{
int m,n;
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a[i][j];
cout<<dp[m][n]<<endl;
return 0;
}