记录编号 46413 评测结果 AAAAAAAAAA
题目名称 [UVa 10285] 最长滑坡 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.627 s
提交时间 2012-10-27 17:59:54 内存使用 2.45 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
using namespace std;
int map[501][501]={0};
struct area{
	short x,y;
};
int cmp(const void *a,const void *b){
	return (map[(*(area*)a).x][(*(area*)a).y]>=map[(*(area*)b).x][(*(area*)b).y])?1:-1;
}
int main(){
	freopen("shunzhi.in","r",stdin);
	freopen("shunzhi.out","w",stdout);
	int r,c,i,j,p=0,n,x,y,ans=0;
	struct area s[250001];
	int f[501][501]={0};
	cin>>r>>c,n=r*c;
	for(i=0;i<r;i++){
		for(j=0;j<c;j++){
			cin>>map[i][j];
			s[p].x=i,s[p].y=j,p++;
		}
	}
	qsort(s,n,sizeof(s[0]),cmp);
	f[s[n-1].x][s[n-1].y]=1;
	for(i=n-2;i>=0;i--){
		x=s[i].x,y=s[i].y;
		if(x>0&&map[x-1][y]>map[x][y]&&f[x-1][y]+1>f[x][y]) f[x][y]=f[x-1][y];
		if(x<n-1&&map[x+1][y]>map[x][y]&&f[x+1][y]+1>f[x][y]) f[x][y]=f[x+1][y];
		if(y>0&&map[x][y-1]>map[x][y]&&f[x][y-1]+1>f[x][y]) f[x][y]=f[x][y-1];
		if(y<n-1&&map[x][y+1]>map[x][y]&&f[x][y+1]+1>f[x][y]) f[x][y]=f[x][y+1];
		f[x][y]++;
		if(f[x][y]>ans) ans=f[x][y];
	}
	cout<<ans<<endl;
	return 0;
}