洛谷1434 SHOI2002 滑雪

题目:滑雪


思路:记忆化搜索。


代码:

#include<bits/stdc++.h>
using namespace std;

#define maxn 100
#define inf (1<<30)

int n,m;
int a[maxn+5][maxn+5];
int f[maxn+5][maxn+5]={0};

const int m1[5]={0,0,0,1,-1};
const int m2[5]={0,1,-1,0,0};

int dfs(int x,int y){
	if(f[x][y]) return f[x][y];
	f[x][y]=1;
	for(int i=1;i<=4;i++){
		if(x+m1[i]>=1&&x+m1[i]<=n&&y+m2[i]>=1&&y+m2[i]<=m&&a[x+m1[i]][y+m2[i]]<a[x][y]) 
			f[x][y]=max(f[x][y],1+dfs(x+m1[i],y+m2[i]));
	}
	return f[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",&a[i][j]);
		}
	}
	
	int s=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			dfs(i,j);
			s=max(s,f[i][j]);
		}
	}
	
	printf("%d",s);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/rabbit_zar/article/details/80832693