求助#2为何超时
查看原帖
求助#2为何超时
388718
wjk20050306楼主2021/4/5 20:14
#include<bits/stdc++.h>
using namespace std;
int r,c,mp[150][150],len[150][150];
int dx[4]= {0,0,1,-1},dy[4]= {1,-1,0,0};
int cnt=0,q=0,p=0;
bool vis[150][150];
void ch(int x,int y) {
	if(vis[x][y]) {
		len[q][p]=cnt+len[x][y];
		return;
	}
    len[x][y]=1;
	int tmax=-10,a=0,b=0;
	for(int i=0; i<=3; i++) {
		if(x+dx[i]>0&&x+dx[i]<=r&&y+dy[i]>0&&y+dy[i]<=c) {
			a=x+dx[i];
			b=y+dy[i];
			if(mp[a][b]<mp[x][y]) {
				cnt++;
				ch(a,b);
				len[x][y]=max(len[a][b]+1,len[x][y]);
			}
		}
	}
	return;
}
void solve() {
	for(int i=1; i<=r; i++) {
		for(int j=1; j<=c; j++) {
			cnt=0;
			q=i,p=j;
			if(vis[q][p]) continue;
			ch(q,p);
		}
	}
}
int ans=-10;
void find() {
	for(int i=1; i<=r; i++) {
		for(int j=1; j<=c; j++) {
			ans=max(ans,len[i][j]);
		}
	}
}
int main() {
	scanf("%d%d",&r,&c);
	for(int i=1; i<=r; i++) {
		for(int j=1; j<=c; j++) scanf("%d",&mp[i][j]);
	}
	solve();
	find();
	printf("%d",ans);
	return 0;
}
2021/4/5 20:14
加载中...