题目链接:UVA-1025
题意:
给定n个车站,时间T,列车从车站i到车站i+1需要的时间t[i]。给定M1辆从车站1驶往车站n的列车发车时间,以及M2辆从车站n驶往车站1的列车发车时间。皮皮怪初始在车站1,要在T时刻到达车站n,问他至少要在车站等多久——车在车站停留时间忽略不计,并且假设皮皮怪特别敏捷,两辆车同时到车站他也能完成换乘,如果T时刻不可能在车站n就输出impossible。
分析:
这是一个很明显的多决策的问题,假设皮皮 i 时刻在车站 j(以dp[i][j]表示从现在开始他需要在车站等车的最少时间),那么他有三个决策:
(1)原地等一秒:dp[i][j] = dp[i+1][j]
(2)如果有向左的列车可搭乘:dp[i][j] = dp[i+t[i-1]][j-1]
(3)如果有向右的列车可搭乘:dp[i][j] = dp[i+t[i]][j+1]
我们需要做的就是在三个决策寻找最优的,也就是三个里最小的~
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<string>
#include<cstring&