P1434 滑雪(记忆化搜索)

首先考虑搜索,发现一个点,无论它由哪个点转移而来,答案始终固定不变。
记忆化搜索就是对于此记录答案,保证只搜一次。

```plaintext
#include<bits/stdc++.h>
using namespace std;
const int N=109,dx[4]={1,0,0,-1},dy[4]={0,1,-1,0};
int n,m,mp[N][N],dp[N][N],ans;
inline bool ok(int x,int y){return x>0&&y>0&&x<=n&&y<=m;}
int dfs(int x,int y){
    if(dp[x][y]!=0) return dp[x][y];
    for(int o=0;o<4;o++) if(ok(x+dx[o],y+dy[o])&&mp[x+dx[o]][y+dy[o]]<mp[x][y])
        dp[x][y]=max(dp[x][y],dfs(x+dx[o],y+dy[o]));
    return ++dp[x][y];
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&mp[i][j]);
    for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ans=max(ans,dfs(i,j));
    printf("%d\n",ans);
        
}
posted @ 2026-02-22 21:45  2025ing  阅读(0)  评论(0)    收藏  举报