zoukankan      html  css  js  c++  java
  • POJ1088 滑雪

        原题链接:http://poj.org/problem?id=1088

        动态规划,记忆化搜索。

    View Code
    #include <cstdio>
    #include <cstring>
    #define MAXN 105
    #define max(x,y) x > y ? x : y
    
    int a[MAXN][MAXN], dp[MAXN][MAXN];
    int dr[4][2] = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};
    int R, C;
    
    int DP(int r, int c)
    {
        if(dp[r][c] != -1)
        {
            return dp[r][c];
        }
        dp[r][c] = 1; //initialize
        for(int i = 0; i < 4; i ++)
        {
            int rr = r + dr[i][0];
            int cc = c + dr[i][1];
            if(rr < 1 || rr > R || cc < 1 || cc > C)
                continue;
            if(a[rr][cc] < a[r][c])
                dp[r][c] = max(dp[r][c], DP(rr, cc) + 1);
        }
        return dp[r][c];
    }
    
    void skiing()
    {
        memset(dp, -1, sizeof(dp));
        for(int r = 1; r <= R; r ++)
        {
            for(int c = 1; c <= C; c ++)
            {
                dp[r][c] = DP(r, c);
            }
        }
    }
    
    int main()
    {
        while(~scanf("%d%d", &R, &C))
        {
            for(int i = 1; i <= R; i ++)
            {
                for(int j = 1; j <= C; j ++)
                {
                    scanf("%d", &a[i][j]);
                }
            }
            skiing();
            int max = 0;
            for(int i = 1; i <= R; i ++)
            {
                for(int j = 1; j <= C; j ++)
                {
                    if(dp[i][j] > max)
                        max = dp[i][j];
                }
            }
            printf("%d\n", max);
        }
        return 0;
    }
  • 相关阅读:
    Postfix邮件
    RAID和LVM磁盘阵列
    CF1400G
    CF1400F
    2020 AC Saber夏季赛 游记
    APIO2018 题解
    2020北京中考游记
    初中数学几何推理大梳理
    CF1373F Network Coverage
    部编人教版初中历史书事件影响/意义汇总
  • 原文地址:https://www.cnblogs.com/huangfeihome/p/2668805.html
Copyright © 2011-2022 走看看