zoukankan      html  css  js  c++  java
  • nyoj 10 skiing(记忆化搜索)

    skiing

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:5
     
    描述
    Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 
    1 2 3 4 5

    16 17 18 19 6

    15 24 25 20 7

    14 23 22 21 8

    13 12 11 10 9

    一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。
     
    输入
    第一行表示有几组测试数据,输入的第二行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
    后面是下一组数据;
    输出
    输出最长区域的长度。
    样例输入
    1
    5 5
    1 2 3 4 5
    16 17 18 19 6
    15 24 25 20 7
    14 23 22 21 8
    13 12 11 10 9
    
    样例输出
    25

    不会写 看了协会大牛的代码,感觉记忆化搜索挺厉害的 大致就是搜索的时候 保存下来已经走过的值,这样当再次走到这时就不需要
    再运算了,应该算是dp和搜索的结合
    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #include<cstdio> 
    #include<string>
    #include<math.h>
    #include<algorithm>
    #define LL long long
    #define PI atan(1.0)*4
    #define DD double
    #define MAX 110
    #define mod 100
    #define dian 1.000000011
    #define INF 0x3f3f3f
    using namespace std;
    int s[MAX][MAX];
    int dp[MAX][MAX];
    int n,m;
    int judge(int i,int j)
    {
    	if(i>=1&&i<=n&&j>=1&&j<=m)
    	    return 1;
    	return 0;
    }
    int move[4][2]={0,1,0,-1,-1,0,1,0};
    int dfs(int x,int y)
    {
    	int i,j;
    	if(dp[x][y]!=-1) return dp[x][y];
    	dp[x][y]=0;
    	for(i=0;i<4;i++)
    	{
    		int ex=x+move[i][0];
    		int ey=y+move[i][1];
    		if(judge(ex,ey)&&s[x][y]>s[ex][ey])
    		    dp[x][y]=max(dp[x][y],dfs(ex,ey)+1);
    	}
    	return dp[x][y];
    }
    int main()
    {
    	int j,i,t,k,o,l;
        scanf("%d",&t);
        while(t--)
        {
        	scanf("%d%d",&n,&m);
        	for(i=1;i<=n;i++)
        	    for(j=1;j<=m;j++)
        	        scanf("%d",&s[i][j]);
        	memset(dp,-1,sizeof(dp));
        	int ans=-1;
        	for(i=1;i<=n;i++)
        	{
        		for(j=1;j<=n;j++)
        		{
        			ans=max(ans,dfs(i,j));
        		}
        	}
        	printf("%d
    ",ans+1);
        }
    	return 0;
    }
     
    

      

  • 相关阅读:
    springcloud-spring cloud config统一配置中心
    springcloud-hystrix断路器对微服务的容错处理
    springcloud-feign组件实现声明式的调用
    springcloud-Ribbon-负载均衡组件
    springcloud-Eureka-服务注册与发现核心组件
    springcloud入门-什么是springcloud
    Redis缓存设计及常见问题
    Lucene全文检索入门使用
    redis安装、使用
    nodejs环境 + 入门 + 博客搭建
  • 原文地址:https://www.cnblogs.com/tonghao/p/5334190.html
Copyright © 2011-2022 走看看