这还是一道简单题
时间: 1ms 内存:128M
描述:
一个 N*N 矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。例如:3 * 3 的方格。1 3 32 1 32 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
提示:
参考答案(内存最优[1952]):
#include<stdio.h>
#define max(a,b) a>b?a:b
int main()
{
int a[501][501];
int i,j,n,sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=n-2;i>=0;i--)
a[n-1][i]+=a[n-1][i+1];
for(i=n-2;i>=0;i--)
a[i][n-1]+=a[i+1][n-1];
for(i=n-2;i>=0;i--)
for(j=n-2;j>=0;j--)
a[i][j]+=max(a[i+1][j],a[i][j+1]);
printf("%d",a[0][0]);
return 0;
}
参考答案(时间最优[32]):
#include<stdio.h>
#define max(a,b) a>b?a:b
int main()
{
int a[501][501];
int i,j,n,sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=n-2;i>=0;i--)
a[n-1][i]+=a[n-1][i+1];
for(i=n-2;i>=0;i--)
a[i][n-1]+=a[i+1][n-1];
for(i=n-2;i>=0;i--)
for(j=n-2;j>=0;j--)
a[i][j]+=max(a[i+1][j],a[i][j+1]);
printf("%d",a[0][0]);
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。