Live2D

[题解]SHOI2002,洛谷P1434 滑雪

原题

  链接

 

思路

  记忆化搜索

代码

  

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;

inline int read(){
    char c=getchar();int x=0,w=1;
    while(c<'0'||c>'9'){
        if(c=='-')w=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9'){
        x=(x<<3)+(x<<1)+c-'0';
        c=getchar();
    }
    return x*w;
}

int r,c,G[101][101],mem[101][101]={0},ans=0;

int nx[]={-1,1,0,0},ny[]={0,0,-1,1};

int dfs(int x,int y){
    if(mem[x][y])return mem[x][y];
    int flag=1;
    for(int kk=0;kk<4;kk++){
        int tagx=x+nx[kk],tagy=y+ny[kk];
        if(tagx>=1&&tagx<=r&&tagy>=1&&tagy<=c&&G[x][y]>G[tagx][tagy]){
            flag=max(dfs(tagx,tagy)+1,flag);
        }
    }
    mem[x][y]=flag;
    return flag;
}

int main(){
    r=read();c=read();
    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++)
            G[i][j]=read();
    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++){
            mem[i][j]=dfs(i,j);
            ans=max(ans,mem[i][j]);
        }
    printf("%d\n",ans);
    return 0;
} 

 

posted @ 2019-01-20 16:19  SHGEEK  阅读(135)  评论(0编辑  收藏  举报