记忆化搜索例题

例题洛谷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);
posted @ 2020-09-15 19:46  一个经常掉线的人  阅读(128)  评论(0)    收藏  举报