比赛 防止浮躁的小练习v0.2 评测结果 AAAAAAAAAA
题目名称 最长滑坡 最终得分 100
用户昵称 半汪 运行时间 0.255 s
代码语言 C++ 内存使用 5.16 MiB
提交时间 2016-10-08 09:29:47
显示代码纯文本
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,m;
int hight[510][510],f[510][510];
int ans=0,cnt=0;
struct Node{
	int x,y,w;
}node[250010];
bool Comp(const Node&a,const Node&b){
	return a.w>b.w;
}
int Max(int x,int y){if(x>y)return x;return y;}
int main(){
	freopen("shunzhi.in","r",stdin);
	freopen("shunzhi.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%d",&hight[i][j]);
			node[++cnt].x=i,node[cnt].y=j,node[cnt].w=hight[i][j];
		}
	}
	sort(node+1,node+cnt+1,Comp);
	for(int i=1;i<=cnt;i++){
		int x=node[i].x,y=node[i].y;
		f[x][y]=1;
		if(x+1<=n&&hight[x+1][y]>hight[x][y])f[x][y]=Max(f[x][y],f[x+1][y]+1);
		if(x-1>0&&hight[x-1][y]>hight[x][y])f[x][y]=Max(f[x][y],f[x-1][y]+1);
		if(y+1<=m&&hight[x][y+1]>hight[x][y])f[x][y]=Max(f[x][y],f[x][y+1]+1);
		if(y-1>0&&hight[x][y-1]>hight[x][y])f[x][y]=Max(f[x][y],f[x][y-1]+1);
		ans=Max(ans,f[x][y]);
	}
	printf("%d",ans);
   return 0;
}