前置知识:矩阵,floyd算法
题目背景 P2886 [USACO07NOV] Cow Relays G
这道题里,我们要求两点之间经过 K K K 条边的最短路大小。
想一想怎么使用最短路的三种算法,发现都不能套,不过 Floyd 算法因为使用的动态规划,可以通过叠加状态来解决这个比普通最短路多出的限制。
朴素的动态规划
设 f [ i ] [ j ] [ s ] f[i][j][s] f[i][j][s] 为 i i i 到 j j j 经过 s s s 条边的最短路。
经过一条边,可以很轻松地解决,如果经过 s s s 条边,那么这条最短路径一定会在 i i i 到某点 k k k 经过 s − 1 s - 1 s−1 条边,而从 k k k 到 j j j 经过 1 1 1 条边,所以转移方程 f [ i ] [ j ] [ s ] = min k = 1 n ( f [ i ] [ k ] [ s − 1 ] + f [ k ] [ j