HDOJ2059 龟兔赛跑 解题报告

来源:互联网 发布:数据库的三种数据模型 编辑:程序博客网 时间:2024/05/17 02:37

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2059

代码网上很多,大同小异。

给个链接http://blog.163.com/lovejingru@yeah/blog/static/867524782010102210213557/

解法大都是DP,代码很简单。这里解释两个难点。(本人第一次用DP,想了很久才明白)

1、这个关键的式子TIME[A,B]=TIME[A,K]+Direct[K,B]

2、没有考虑不加油的问题

3、没有考虑油还剩余的问题

对第一个问题:

到达某一个加油站B的最短时间实际就是到达它之前某一个加油站K最短时间(可能是起点)+加油站K直接到B的时间。即:TIME[A,B]=TIME[A,K]+Direct[K,B];这里有一个疑问,我当时很长时间都没搞清楚,就是Direct[K,B]为什么要从加油站K直接到B而不是先经过某一个加油站M然后再到B,其实这很简单,我们假设起点为A,并且计算从A先到某一加油站K,然后再由K先经过某一加油站M,然再由M直接到终点B,即:A...K,..M--B..这样的话其实就变为了,从加油站A到M(A。K+K。M)的最短时间+再从M到B的时间了,而M本身其实就是某一个K。重复了。。。

对第二个问题:

Direct[K,B]这一步已经把不加油的全跳过去了,K之前已经包括了加油不加油的所有情况,第二重循环是该步也包括了所有情况

对第三个问题:

同2,没跳过的都是要加油的,不管还剩不剩了

(A ,K-1, B)已经包括不再K点加油的情况了。

原创粉丝点击