链接: http://codeforces.com/problemset/problem/1601/B
题意
有一只青蛙掉到了井里 想要跳回到地面上
它在不同的位置具有不同的跳跃高度 可以到达跳跃高度内的任一高度
每次到了一个高度以后,需要休息会下滑一定的距离
求最快跳几次可以跳上地面 并给出每次的路径(每次到的位置为下滑前的位置)
解法
可以把问题抽象成一个最短路径的问题
令dp[i]表示到达高度i所需要花的最少跳跃次数
用par数组存储每次的起跳位置和跳到的位置
用bfs的方式来扩展搜索路径 每次把下滑后的位置插入队列
直到跳跃到地面
回溯par数组找出路径
重点在于需要记录每次的起跳位置和跳到的位置 但是下滑后的位置由队列来进行维护
细节见代码
代码
1 |
|