比赛 |
防止浮躁的小练习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;
}