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

    记忆化搜索的经典例题

    一个显然的想法,直接枚举每一个点作为起点然后dfs,求出最大值。显然这种做法一定会TLE,我们不妨进行一下优化:由于每一个点会被重复搜索,我们不妨进行记忆化,当这一个点搜索完成后,我们记下从这个点出发的最优解。下次搜索到这个点时我们就可以O(1)返回答案,这样搜索效率大大提高,减少了很多无用的搜索,我们的算法就可以AC了。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 int map[110][110],f[110][110],n,m;
     7 int dx[5]={0,0,1,-1};
     8 int dy[5]={1,-1,0,0};
     9 int dfs(int x,int y) {
    10     if(f[x][y]!=-1) return f[x][y];
    11     f[x][y]=0;
    12     int sum=0;
    13     for(int i=0;i<5;i++) {
    14         int xx=x+dx[i];
    15         int yy=y+dy[i];
    16         if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&map[x][y]>map[xx][yy]) {
    17             sum=max(sum,dfs(xx,yy));
    18         }
    19     }
    20     return f[x][y]=sum+1;
    21 }
    22 int main() {
    23     cin>>n>>m;
    24     for(int i=1;i<=n;i++)
    25         for(int j=1;j<=m;j++)
    26             cin>>map[i][j];
    27     memset(f,-1,sizeof(f));
    28     int ans=0;
    29     for(int i=1;i<=n;i++)
    30         for(int j=1;j<=n;j++) {
    31             int x=dfs(i,j);
    32             ans=max(ans,x);
    33         }
    34     cout<<ans<<endl;
    35     return 0;
    36 }
    AC Code
  • 相关阅读:
    vue里面的v-for列表循环
    浅谈Vue.use
    js 限制输入框只能输入数字的问题
    vue computed的执行问题
    前端 html 篇
    函数声明 及 名称问题
    文件读写操作
    异常以及异常处理框架探析
    使用JDBC插入数据到ORACLE,使用标识列自增列
    session超时跃出iframe并跳到登陆页面(转载)
  • 原文地址:https://www.cnblogs.com/shl-blog/p/10962226.html
Copyright © 2011-2022 走看看