题目:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2609
分析:用dp[i][j]表示到结点i用了j次免费名额,那么dp[i][j] = min(dp[t][j - 1], dp[t][j] + cost[t][j]),其中(t, i)之间有边。一种做法就是像下面代码中的那样分k次调用dij,每次都固定k。另一种做法是只调用一次dij,在考察结点t时,考虑t的每一个邻接点i,考虑t与i之间用免费名额与不用两种情况,也就是说对于每一条边(t, i),当考察(t, i)时,可能向队列中加入两个元素。但是这题比较卡时间,用后面这种做法会TLE。
#include
#include
#include
#include
#include
#include