[NOIP2017]逛公园(DP)

先spfa一遍处理出d[]数组,(从n开始bfs一遍标记可以达到n的点)

题意即,在走最短路的基础上,可以最多多走K长度的路径,

考虑DP,每次剩余可走的长度会因决策而改变,所以考虑dp[i][j]为当前在i号节点,剩余可多走长度为j的方案数

dp[u][j]可以从dp[v][e[i].w-(d[v]-d[u])]转移而来,(其中u->v,e[i].w-(d[v]-d[u])即为当前决策多走的路径))

再考虑有0边的情况,如果构成环就会无限方案数,只要在记忆化的时候特判一下-1即可

ps:对于一个dp[u][j]可能为0,初始化不能为0

猜你喜欢

转载自www.cnblogs.com/void-f/p/9332684.html