zoukankan      html  css  js  c++  java
  • poj 1088(记忆化搜索)

    滑雪
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 88560   Accepted: 33212

    Description

    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更长。事实上,这是最长的一条。

    Input

    输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。

    Output

    输出最长区域的长度。

    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

    Source

    以前真是太水了。。竟然是看了解题报告觉得好神奇 前几个月的咸鱼,现在叫菜鸟吧2333

    重写一遍,一个记忆化搜索的基础题。

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    const int N = 105;
    int mp[N][N];
    int dp[N][N]; ///dp[i][j]保存的是当前点能划最远的距离
    int n,m;
    int dir[][2] ={{1,0},{-1,0},{0,1},{0,-1}};
    int dfs(int x,int y){
        int ans = 0;
        if(dp[x][y]>1) return dp[x][y];  ///记忆化搜索:已经搜过剪枝
        for(int i=0;i<4;i++){
            int nextx = x+dir[i][0];
            int nexty = y+dir[i][1];
            if(nextx<1||nextx>n||nexty<1||nexty>m) continue;
            if(mp[nextx][nexty]<mp[x][y]){
                ans = max(ans,dfs(nextx,nexty));
            }
        }
        dp[x][y]=ans+1; ///子问题的解加上1就是当前点的解
        return dp[x][y];
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF){
            for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                scanf("%d",&mp[i][j]);
                dp[i][j] = 1;   ///初始化每个点的高度为自身
            }
            int ans = -1;
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    dfs(i,j);
                    if(dp[i][j]>ans) ans = dp[i][j];
                }
            }
            printf("%d
    ",ans);
        }
    
    }
  • 相关阅读:
    HearthBuddy投降插件2019-11-01的使用
    正则表达式在线分析 regex online analyzer
    Tips to write better Conditionals in JavaScript
    The fileSyncDll.ps1 is not digitally signed. You cannot run this script on the current system.
    Cannot capture jmeter traffic in fiddler
    JMETER + POST + anti-forgery token
    input type color
    HearthBuddy修改系统时间
    What are all the possible values for HTTP “Content-Type” header?
    UDK性能优化
  • 原文地址:https://www.cnblogs.com/liyinggang/p/5384343.html
Copyright © 2011-2022 走看看