有N*M的方格,每个方格里面有一个数字。你从左上角开始出发,每次可以进入右边一个方格或下面一个方格,不准出界。问你选择怎样的线路到达右下角时,线路上的数字和最大?
输入格式
第1行:2个正整数N和M,范围[2,100]。
下面N行,每行M个整数,每个整数范围[-100,100]
输出格式
一个整数。
输入/输出例子1
输入:
3 3
1 2 3
4 5 6
9 9 9
输出:
32
一道经典的动态规划,那么,上代码
!!!!!!
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[1005][1005],b[1005][1005];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(i==1&&j==1)
b[i][j]=a[i][j];
else if(i==1)
b[i][j]=b[i][j-1]+a[i][j];
else if(j==1)
b[i][j]=b[i-1][j]+a[i][j];
else
b[i][j]=(b[i-1][j]>b[i][j-1])?b[i-1][j]+a[i][j]:b[i][j-1]+a[i][j];
}
}
cout<<b[n][m];
return 0;
}
嘿嘿……