比赛 防止浮躁的小练习v0.2 评测结果 AAAAAAAAAA
题目名称 最长滑坡 最终得分 100
用户昵称 Ostmbh 运行时间 0.376 s
代码语言 C++ 内存使用 3.29 MiB
提交时间 2016-10-08 10:11:42
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int f[510][510]={0};
int vis[510][510]={0};
int A[510][510];
int X[5]={0,1,0,0,-1};
int Y[5]={0,0,1,-1,0};
int r,c;
inline int dfs(int x,int y){
	if(vis[x][y])
		return f[x][y];
	int ok=0;
	vis[x][y]=1;
	for(int i=1;i<=4;i++){
		int x1=x+X[i],y1=y+Y[i];
		if(x1<1||x1>r||y1<1||y1>c||A[x1][y1]>=A[x][y])
			continue;
		else {
			ok=1;
			f[x][y]=max(f[x][y],dfs(x1,y1)+1);
		}
	}
	if(!ok)
		return 1;
	else return f[x][y];
}
int main(){
	freopen("shunzhi.in","r",stdin);
	freopen("shunzhi.out","w",stdout);
	cin>>r>>c;
	for(int i=1;i<=r;i++)
		for(int j=1;j<=c;j++){
			cin>>A[i][j];
			f[i][j]=1;
		}
	int ans=0;
	for(int i=1;i<=r;i++)
		for(int j=1;j<=c;j++)
			ans=max(ans,dfs(i,j));
	printf("%d\n",ans);
return 0;
}