记录编号 |
74398 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[UVa 10285] 最长滑坡 |
最终得分 |
100 |
用户昵称 |
digital-T |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.338 s |
提交时间 |
2013-10-25 09:04:25 |
内存使用 |
2.23 MiB |
显示代码纯文本
#include<fstream>
#include<algorithm>
#include<vector>
#include<cmath>
#include<cstring>
using namespace std;
ifstream fi("shunzhi.in");
ofstream fo("shunzhi.out");
int R,C,f[501][501],h[501][501];
class three
{
public:
int x,y,z;
};
vector <three> t;
bool op(three a,three b){return a.z>b.z;}
int main()
{
fi>>R>>C;
int i,j,k;
for(i=1;i<=R;i++)
for(j=1;j<=C;j++)
{
fi>>h[i][j];
t.push_back((three){i,j,h[i][j]});
f[i][j]=1;
}
sort(t.begin(),t.end(),op);
for(k=0;k<R*C;k++)
{
//fo<<t[k].x<<' '<<t[k].y<<' '<<t[k].z<<endl;
i=t[k].x,j=t[k].y;
if(i>1&&h[i-1][j]<h[i][j])f[i-1][j]=max(f[i-1][j],f[i][j]+1);
if(j>1&&h[i][j-1]<h[i][j])f[i][j-1]=max(f[i][j-1],f[i][j]+1);
if(i<R&&h[i+1][j]<h[i][j])f[i+1][j]=max(f[i+1][j],f[i][j]+1);
if(j<C&&h[i][j+1]<h[i][j])f[i][j+1]=max(f[i][j+1],f[i][j]+1);
}
k=1;
for(i=1;i<=R;i++)
for(j=1;j<=C;j++)
k=max(k,f[i][j]);
fo<<k<<endl;
return 0;
}