求改
查看原帖
求改
1201692
ERin_cy楼主2024/5/30 19:30
#include<bits/stdc++.h>
using namespace std;
const int N = 5010;
int mp[N][N];
int dp[N][N];
int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int n,m;
int dfs(int x,int y,int cnt){
	if(dp[x][y]) return dp[x][y];
	bool flag = false;
	for(int i = 0;i<4;i++){
		int dx = x+dir[i][0];
		int dy = y+dir[i][1];
		if(mp[dx][dy]<mp[x][y]){
			flag = true;
		}
	}
	if(!flag) return dp[x][y];
	else{
		int maxx = dp[x][y];
		bool flag = false;
		for(int i = 0;i<4;i++){
			int dx = x+dir[i][0];
			int dy = y+dir[i][1];
		    if(dx<1||dy<1||dx>n||dy>m) continue;
			if(mp[dx][dy]>mp[x][y]){
				flag = true;
				maxx = max(dfs(dx,dy,cnt+1),maxx);
			}
		}
		if(flag){
			dp[x][y] = maxx+1;
		}
		else{
			dp[x][y] = dp[x][y];
		}
		return dp[x][y];
	}
}
int main(){
	cin >> n >> m;
	int maxx = 0;
	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=m;j++){
			cin >> mp[i][j];
			if(mp[i][j]>maxx){
				maxx = mp[i][j];
			}
		}
	}
	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=m;j++){
			dfs(i,j,1);
		}
	}
	int maxn = 0;
	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=m;j++){
			maxn = max(maxn,dp[i][j]);
		}
	}
	cout << maxn + 1 << endl;
	return 0;
}
2024/5/30 19:30
加载中...