Filthy Rich
题目信息:
据说在Phrygia连街道都是用金子铺的,并且在特定的一天甚至允许游客在特定的区域内尽自己所能的收集金子,幸运的你刚好在Phrygia并刚好赶上那一天,so,你懂得,人非常多啊,你只要一次机会穿过这区域,那么怎么走呢;
给你一张地图,上面带有每块区域所有的金子的量,你能从地图的左上角开始移动,只能向东,南,东南方向移动,然后在右下角结束;
输入:
首先是一个数字,表示测试数据的个数;
每组测试数据第一行含有r和c,r表示有多少行,c表示每行多少列,之后为r行c列数字,表示每块区域所有的金子的量
输出:
每组输出包含“Scenario #i:”,i表示第几组测试数据,之后一行是你能收集到的金子的总量;
#include<stdio.h>
#include<string.h>
int map[1001][1001],m[1001][1001];//定义在主函数内会因为数组太大而不能运行
int max(int a,int b,int c)
{
int m;
m=a>b?a:b;
m=c>m?c:m;
return m;
}
int main()
{
int n,r,c,i,j,k;
scanf("%d",&n);
for(k=1;k<=n;++k)
{
scanf("%d%d",&r,&c);
memset(m,0,sizeof(m));
memset(map,0,sizeof(map));
for(i=1;i<=r;++i)
{
for(j=1;j<=c;++j)
{
scanf("%d",&map[i][j]);
m[i][j]=max(m[i-1][j],m[i][j-1],m[i-1][j-1])+map[i][j];
}//选择可以来到这个位置的最大的前一个位置
}
printf("Scenario #%d:\n",k);
printf("%d\n",m[r][c]);
printf("\n");
}
return 0;
}