zoukankan      html  css  js  c++  java
  • tyvj 1004 滑雪 记忆化搜索

     

    滑雪

    Time Limit: 1 Sec  Memory Limit: 256 MB

    题目连接

    http://www.tyvj.cn/p/1004

    Description

        trs喜欢滑雪。他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形。为了得到更快的速度,滑行的路线必须向下倾斜。
        例如样例中的那个矩形,可以从某个点滑向上下左右四个相邻的点之一。例如24-17-16-1,其实25-24-23…3-2-1更长,事实上这是最长的一条。

    Input

    输入文件

    第1行: 两个数字r,c(1<=r,c<=100),表示矩阵的行列。
    第2..r+1行:每行c个数,表示这个矩阵。

    Output

    输出文件

    仅一行: 输出1个整数,表示可以滑行的最大长度。

    Sample Input

    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

    Sample Output

    25

    HINT

     

    题意

     

    题解:

    啊,记忆化搜索,BFS和DFS随便乱搞都行,注意得把所有点都扔进队列里面
    ~(≧▽≦)/~啦啦啦

    代码:

    //qscqesze
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <vector>
    #include <sstream>
    #include <queue>
    #include <typeinfo>
    #include <fstream>
    #include <map>
    typedef long long ll;
    using namespace std;
    //freopen("D.in","r",stdin);
    //freopen("D.out","w",stdout);
    #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
    #define maxn 2001
    #define mod 10007
    #define eps 1e-9
    //const int inf=0x7fffffff;   //无限大
    const int inf=0x3f3f3f3f;
    /*
    inline ll read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int buf[10];
    inline void write(int i) {
      int p = 0;if(i == 0) p++;
      else while(i) {buf[p++] = i % 10;i /= 10;}
      for(int j = p-1; j >=0; j--) putchar('0' + buf[j]);
      printf("
    ");
    }
    */
    //**************************************************************************************
    
    inline ll read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int g[maxn][maxn];
    int dp[maxn][maxn];
    int dx[4]={1,-1,0,0};
    int dy[4]={0,0,1,-1};
    int main()
    {
        int mx=0;
        int my=0;
        int ma=0;
        int n=read(),m=read();
        queue<int> qx;
        queue<int> qy;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                g[i][j]=read();
                dp[i][j]=1;
                qx.push(i);
                qy.push(j);
            }
        }
        while(!qx.empty())
        {
            int nowx=qx.front();
            int nowy=qy.front();
            qx.pop();
            qy.pop();
            for(int i=0;i<4;i++)
            {
                int nextx=nowx+dx[i];
                int nexty=nowy+dy[i];
                if(nextx<1||nextx>n||nexty<1||nexty>m)
                    continue;
                if(g[nextx][nexty]<g[nowx][nowy])
                {
                    if(dp[nowx][nowy]>=dp[nextx][nexty])
                    {
                        dp[nextx][nexty]=dp[nowx][nowy]+1;
                        qx.push(nextx);
                        qy.push(nexty);
                    }
                }
            }
        }
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                ans=max(dp[i][j],ans);
            }
        }
        cout<<ans<<endl;
    }
  • 相关阅读:
    猜数字小游戏的设计
    实验三 敏捷开发与XP实践 实验报告
    实验二Java面向对象程序设计
    课程总结报告
    Android实践项目汇报总结(下)
    Android实践项目汇报总结(上)修改
    Android项目开发四
    Android项目开发三
    Android项目开发二
    Android项目开发一
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4411569.html
Copyright © 2011-2022 走看看