【水】【动态规划】香穗子系列解题报告

Problem 1  活蹦乱跳的香穗子

香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1,且每个格子都有其价值

跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她只能往价值更高(这里是严格的大于)的格子跳.

香穗子可以从任意的格子出发,在任意的格子结束,

那么她最多能跳几次?

输入:

       第一行n,m,表示田野的长和宽

接下来n,每行m个数,表示该格的价值

输出:

一个数,表示最多跳得次数

Sample Input

2 2

2 5

-1 3

 

Sample Output

       3

 

数据范围:

       n,m<=100

       答案保正小于Maxlongint

 

思路:目测和滑雪一样,最长上升子序列升级版,显然,每个点的值由周围四个点可以推出,易得方程:f[I,j]=max{f[i-1,j],f[i+1,j],f[I,j-1],f[I,j+1]}+1 (map[I,j]<map[I’,j’]),由于找不到递推顺序,所以用记忆化搜索的方式求解,对每个点进行一次搜索,输出最大值即可

提交情况:显然1AC

经验:不要尝试去找这种类型的方程的递推顺序= =

收获:同上

 

ACCode

Program one;

Const

       xc:array[1..4]oflongint=(0,1,0,-1);

       yc:array[1..4]oflongint=(1,0,-1,0);

Var

       n,m,max:longint;

       map,f:array[0..150,0..150]oflongint;

Procedure init;

var

       i,j:longint;

begin

       assign(input,'1.in');

       assign(output,'1.out');

       reset(input);

       rewrite(output);

 

       readln(n,m);

       fori:=1 to n do

              forj:=1 to m do

                     read(map[i,j]);

end;

 

Procedure terminate;

begin

       close(input);

       close(output);

       halt;

end;

 

Function dp(x,y:longint):longint;

var

       i,t:longint;

begin

       iff[x,y]<>0 then exit(f[x,y]);

       

       fori:=1 to 4 do

       begin

              if(x+xc[i]<0)or(x+xc[i]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值