记录编号 74398 评测结果 AAAAAAAAAA
题目名称 [UVa 10285] 最长滑坡 最终得分 100
用户昵称 Gravatardigital-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;
}