80pts求助(玄关)
查看原帖
80pts求助(玄关)
1287433
__ycy1124__楼主2024/7/8 14:36

#1 #2 WA,均少一

#include<bits/stdc++.h>
using namespace std;
int h[102][102];
int dp[102][102];
struct Node{
	int x,y,w;
}a[10005];
int p1[4]={1,-1,0,0},p2[4]={0,0,1,-1};
bool cmp(Node x1,Node x2){
	return x1.w>x2.w;
}
int main(){
	int r,c;
	scanf("%d%d",&r,&c);
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			scanf("%d",&h[i][j]);
			a[(i-1)*r+j]={i,j,h[i][j]};
		}
	}
	sort(a+1,a+r*c+1,cmp);
	for(int i=1;i<=r*c;i++){
		int js=0;
		for(int j=0;j<4;j++){
			if(h[a[i].x][a[i].y]<h[a[i].x+p1[j]][a[i].y+p2[j]]){
				js=max(js,dp[a[i].x+p1[j]][a[i].y+p2[j]]);
			}
		}
		dp[a[i].x][a[i].y]=++js;
	}
	int ans=0;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			ans=max(ans,dp[i][j]);
		}
	}
	printf("%d",ans);
	return 0;
}
2024/7/8 14:36
加载中...