40,求调
查看原帖
40,求调
1387250
zifeiwoye楼主2025/1/11 18:01
#include <bits/stdc++.h>

using namespace std;

map<int,pair<int,int> > mapp;

int ma[105][105],r,c,t[10005],dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};

int main()
{
	cin>>r>>c;
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=c;j++)
		{
			cin>>ma[i][j];
			t[r*i+j-r]=ma[i][j];
			mapp[ma[i][j]]=make_pair(i,j);
		}
	}
	sort(t+1,t+r*c+1);
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=c;j++)
		{
			ma[mapp[t[r*i+j-r]].first][mapp[t[r*i+j-r]].second]=i*r-r+j;
			mapp[r*i+j-r]=make_pair(mapp[t[r*i+j-r]].first,mapp[t[r*i+j-r]].second);
		}
	}
	int dp[105]={1},maxx=1;
	dp[1]=1;
	for(int i=2;i<=r*c;i++)
	{
		int x=mapp[i].first,y=mapp[i].second;
		for(int j=0;j<4;j++)
		{
			if(ma[x+dx[j]][y+dy[j]]<ma[x][y])
				dp[i]=max(dp[ma[x+dx[j]][y+dy[j]]]+1,dp[i]);
		}
		maxx=max(maxx,dp[i]);
	}
	cout<<maxx;
	return 0;
}
2025/1/11 18:01
加载中...