MLE 50pts 求调
查看原帖
MLE 50pts 求调
592238
Elairin176楼主2022/12/12 21:13
#include <iostream>
using namespace std;
int r,c,a[101][101],mem[101][101],ans,dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
inline int max(int a,int b){
	return a>b?a:b;
}
int dfs(int x,int y){
	if(mem[x][y]){
		return mem[x][y];
	}
	int t=0;
	for(int i=0;i<4;i++){
		int xx=x+dx[i],yy=y+dy[i];
		if(xx<0||yy<0||xx>=r||yy>=c||a[xx][yy]>a[x][y]){
			t=max(t,1);
			continue;
		}
		if(mem[xx][yy]){
			t=max(t,1+mem[xx][yy]);
		}else{
			t=max(t,1+dfs(xx,yy));
		}
	}
	mem[x][y]=t;
	return t;
}
int main(void){
	scanf("%d%d",&r,&c);
	for(int i=0;i<r;i++){
		for(int j=0;j<c;j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(int i=0;i<r;i++){
		for(int j=0;j<c;j++){
			if(mem[i][j]){
				ans=max(ans,mem[i][j]);
			}else{
				ans=max(ans,dfs(i,j));
			}
		}
	}
	printf("%d",ans);
}
2022/12/12 21:13
加载中...