现在的位置: 首页 > 综合 > 正文

Pku acm 1088 滑雪 动态规划题目解题报告(十五)

2013年01月27日 ⁄ 综合 ⁄ 共 624字 ⁄ 字号 评论关闭

http://acm.pku.edu.cn/JudgeOnline/problem?id=1088

1  2  3  4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

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

Opt[i][j]表示位置i j上最大的下降距离,如果其周围4个点存在高度比i j高,且opt没有ij 大的点,则opt[i][j]=opt[周围]+1;另外,这个问题中存在大量重复问题,应该将计算的结果存储起来,避免重复的计算。

关键部分的c代码为:

for(k=0;k<4;k++)

{

    if(isIn(i+dx[k],j+dy[k]) && heigth[i][j]<heigth[i+dx[k]][j+dy[k]])

    {

        int num = dp(i+dx[k],j+dy[k]);

        if(opt[i][j]<=num)

        {

            opt[i][j] = num+1;

        }

    }

}

其中const int dx[] = {0,0,-1,1},dy[] = {-1,1,0,0};表示一个点周围的4个点。带有详细注释的代码可以在http://download.csdn.net/user/china8848/获得 

抱歉!评论已关闭.