3158: 这还是一道简单题
时间限制: 1 Sec 内存限制: 128 MB提交: 27 解决: 11
[ 提交][ 状态][ 讨论版]
题目描述
一个 N*N 矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。
例如:3 * 3 的方格。
1 3 3
2 1 3
2 2 1
能够获得的最大价值为:11。
输入
第1行:N,N为矩阵的大小。(2 <= N <= 500)
第 2 - N + 1 行:每行 N 个数,中间用空格隔开,对应格子中奖励的价值。(1 <= N[i] <= 10000)
输出
输出能够获得的最大价值。
样例输入
3
1 3 3
2 1 3
2 2 1
样例输出
11
#include <iostream>
#include<stdio.h>
#include <string.h>
#define N 550
using namespace std;
int d[N][N],mp[N][N];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&mp[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j]=max(d[i-1][j],d[i][j-1])+mp[i][j];
cout<<d[n][n]<<endl;
}
一道动态规划的入门问题,由于C++包含了max函数,所以选用C++项目。
#include <iostream>
#include<stdio.h>
#include <string.h>
#define N 550
using namespace std;
int d[N][N],mp[N][N];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&mp[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j]=max(d[i-1][j],d[i][j-1])+mp[i][j];
cout<<d[n][n]<<endl;
}