记忆化搜索例题
例题洛谷P1434
#include <iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
using namespace std;
int n,m;
int ans,temp;
int a[105][105],dp[105][105];
int xx[]={0,1,0,-1};
int yy[]={1,0,-1,0};
int nx,ny;
int dfs(int x,int y){
if(dp[x][y]>0){
return dp[x][y];
}
temp=1;
for(int i=0;i<4;i++){
nx=x+xx[i];ny=y+yy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]<a[x][y]){
temp=max(temp,dfs(nx,ny)+1);
}
}
return dp[x][y]=temp;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
ans=max(ans,dfs(i,j));
}
}
cout<<ans<<endl;
return 0;
}
// freopen("testdata.in", "r", stdin);

浙公网安备 33010602011771号