poj 1661 Help Jimmy

来源:互联网 发布:apple pencil 软件 pdf 编辑:程序博客网 时间:2024/05/16 07:56

DPDPDPDPDPDPDPDP。。。。

 

强大的DP。。。

 

搜的资料上有讲解这题的,一直没看懂,搜了好多人的代码,比较看来,还是资料上的好点。基本完全照抄了。中间还搬错的有,害我找了好长时间。。把那y改成x就OK了,崩溃!

 

怎么说呢,这种方法还凑合,会思考下这一步为什么这么做,因为DP还是不熟练,自己写的话写不出来。。。

 

这道题求时间最短,把这个问题分解为,左端到达低端时间最短时间,和右端到达低端最短时间,使用递归。

 

应该是这样滴,嗯。递归的最底层是地面和最低板的时间,算出这个最短时间然后算高一层到达最低板的时间。。。。。。表达能力真次啊。。。

 

把资料上的解释摘下来了:

 

n 此题目的子问题是什么呢?
n Jimmy 跳到一块板上后,可以有两种选择,向左走或向右走。走到左端和走到右端所需的时间,容易算出。
n 如果我们能知道,以左端为起点到达地面的最短时间,和以右端为起点到达地面的最短时间,那么向左走还是向右走,就很容选择了。
n 因此,整个问题就被分解成两个子问题,即Jimmy 所在位置下方第一块板左端为起点到地面的最短时间,和右端为起点到地面的最短时间。这两个子问题在形式上和原问题是完全一致的。
n
代码在编译错误了N次,WA了一次后终于AC。
编译错误是因为资料用了好多C不允许但C++允许的格式。。。崩溃。长记性了。
 将板子从上到下从1 开始进行无重复的编号(高度相同的板子,哪块编号在前无所谓),那么,和上面两个子问题相关的变量就只有板子的编号。