zoukankan      html  css  js  c++  java
  • poj 1088 滑雪

    //滑雪,记忆化搜索解决
    //dp[i][j]表示从(i,j)开始出发所能滑的最长长度
    //显然状态转移方程为dp[i][j]=max{上下左右四个方向的dp值}+1;
    //我们只需要在DP过程中时刻更新最大值MAX即可
    #include <stdio.h>
    #include <string.h>
    #define N 110
    int R,C;
    int a[N][N],dp[N][N],MAX;
    bool vis[N][N];
    int x[5]={0,-1,1,0,0}, y[5]={0,0,0,-1,1};
    
    void DP(int i , int j)
    {
        int k,xx,yy,tmp;
        if(vis[i][j]) return ;
        vis[i][j]=1;
        dp[i][j]=1;
        for(k=1; k<=4; k++)  //枚举四个方向
        {
            xx=i+x[k];  yy=j+y[k];  //得到新的坐标
            if( xx>=1 && xx<=R && yy>=1 && yy<=C && a[xx][yy]>a[i][j] )
            {
                DP(xx,yy);
                if(dp[xx][yy]+1 > dp[i][j])
                    dp[i][j]=dp[xx][yy]+1;
            }
        }
        return  ;
    }
    int main()
    {
        int i,j;
        while(scanf("%d%d",&R,&C)!=EOF)
        {
            for(i=1; i<=R; i++)
                for(j=1; j<=C; j++)
                    scanf("%d",&a[i][j]);
            memset(vis,0,sizeof(vis));
            memset(dp,0,sizeof(dp));
            MAX=-1;
            for(i=1; i<=R; i++)
                for(j=1; j<=C; j++)
                    if(!vis[i][j])
                    {
                        DP(i,j);
                        MAX=MAX>dp[i][j]?MAX:dp[i][j];
                    }
            printf("%d\n",MAX);
        }
        return 0;
    }
  • 相关阅读:
    js实现冒泡排序
    AngularJS控制器
    AngularJS指令
    AngularJS表达式
    AngularJS基础
    Python小例子(判断质数)
    Python小例子(求和)
    Python笔记
    js小例子(简单模糊匹配输入信息)
    word学习笔记
  • 原文地址:https://www.cnblogs.com/scau20110726/p/2740953.html
Copyright © 2011-2022 走看看