坑爹啊啊啊啊啊啊

【题目描述】

滑雪是一项很受欢迎的体育运动,为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡。我们想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子:


  12 3 4 5

1617 18 19 6

1524 25 20 7

1423 22 21 8

1312 11 10 9


我们可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。


【输入格式】

输入的第一行表示区域的行数R和列数C(1<= R,C <= 500)。下面是R行,每行有C个整数,代表高度h0<=h<=10000


【输出格式】

输出最长区域的长度。


【样例输入】

5 5

1 2 34 5

16 1718 19 6

15 2425 20 7

14 2322 21 8

13 1211 10 9


【样例输出】

25


有了前面的例子,不难看出,每个点可以由四个方向中比它高的点滑到。设DX= {0,1,0,-1}DY ={1,0,-1,0}F[I,J]表示滑到第I行第J列的点时存在的最长滑坡长度,则有状态转移方程:F[I,J]= Max{F[I+DX[K],J+DY[K]]}+1,其中要求满足第I+DX[K]行第J+DY[K]列的点存在且高度比第I行第J列的点的高度高。我们可以按照深度优先搜索的方式计算F,并利用二维数组Arr记录计算过的F值,


posted @ 2012-11-03 15:57  MFT  阅读(181)  评论(0编辑  收藏  举报