记录编号 |
46413 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[UVa 10285] 最长滑坡 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
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;
}