-
题目链接
-
题目大意:现有n个车站,从1号车站出发,目的地为n号车站,相邻两个车站间路程消耗时间为1。但乘车需要乘车卡(一张乘车卡可以无限用但有最大连续车站限制),从中间车站下车再上车需要等待时间。现给出n-1张乘车卡的价格(第i张卡可以连续坐i站,之后需要下车再上车)和中间n-2个站点下车需要等待的时间。问能否在总时间不超过t的限制下找出最少花费,其中t >= n-1,即保证有答案。
-
思路:首先我们知道,如果有两张可乘坐长度为a和b的卡(a < b),那么卡b是可以当做卡a使用的,即如果卡i能满足t时间限制,那么i至n-1的所有卡都能满足t时间限制,我们需要找到最小的i,取区间i到n-1中最便宜的卡即可,因此可以使用二分答案处理。 二分答案需要判断在给定最长连续乘坐长度len的情况下,能否满足时间t的限制。我们用dp[i]表示到达第i个车站需要消耗的最小等待时间,如果所有车站的dp值都小于等于t - (n - 1),说明符合要求。同时得到状态转移方程dp[i] = min(dp[j] + d[j]),表示从第j站下车后再上车到达第i站,d[j]为车站等待时间,i - j <= len。 由于时间限制,需要使用单调队列或者线段树维护指定区间dp[j]+d[j]的最小值。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include