杭电2391 Filthy Rich

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;
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值