解法一:动态规划DP
我们容易想到小贪心,如果要驻守第 i i i 个城堡,应选择最后那个与 i i i 有路径的城堡。反证:如果有两条路 u 1 → v , u 2 → v ( u 2 > u 1 ) u_1→v,u_2→v(u_2>u_1) u1→v,u2→v(u2>u1),我们选择在攻打完成 u 1 u_1 u1 城堡时就驻守 v v v,和在 u 2 u_2 u2 的价值没区别,而且这样做可能导致在攻打 u 1 + 1... u 2 u_1+1...u_2 u1+1...u2 的城堡时出现士兵不足的现象。
设 p [ i ] p[i] p[i] 为最后一个与 i i i 相连的城堡编号。对于每条路径 u , v u,v u,v,更新 p [ v ] = m a x { u } p[v]=max\{u\} p[v]=max{ u},这样一来就不用考虑判重的情况了。
设 f [ i ] [ j ] f[i][j]