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);
}

浙公网安备 33010602011771号