10.skiing

时间:2015-03-06 17:24:57   收藏:0   阅读:187
/*如果不使用记忆化搜索算法,效率将是非常低的*/
#include <stdio.h>

int map[101][101];
int dp[101][101];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int m,n;

int dfs(int i, int j)
{
	int k,mm,nn,t;
	if(dp[i][j])
		return dp[i][j];
	for(k=0;k<4;k++)
	{
		mm=i+dir[k][0],nn=j+dir[k][1];
		if(mm>=0 && mm<m && nn>=0 && nn<n && map[mm][nn]<map[i][j])
		{
			t=dfs(mm,nn);
			if(dp[i][j]<=t)
				dp[i][j]=t+1;
		}
	}
	return dp[i][j];
}

int main(void)
{
	int c,i,j,k,max;
	scanf("%d",&c);
	while(c--)
	{
		scanf("%d%d",&m,&n);
		for(i=0;i<m;i++)
		{
			for(j=0;j<n;j++)
			{
				scanf("%d",&map[i][j]);
				dp[i][j]=0;
			}
		}
	
		
		/*for(i=0;i<m;i++)
		{
			for(j=0;j<n;j++)
			{
				printf("%d ",map[i][j]);
			}
			printf("\n");
		}*/
		

		for(i=0,max=-1;i<m;i++)
		{
			for(j=0;j<n;j++)
			{
				k=dfs(i,j);
				if(max<k)
					max=k;
			}
		}
		printf("%d\n",max+1);

	}
	return 0;
}


原文:http://anglecode.blog.51cto.com/5628271/1617856

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!