2020牛客寒假算法基础集训营3——J.牛牛的宝可梦Go【最短路 & DP(01背包) & 复杂度优化】(附优化分析)

这篇博客介绍了如何解决一个关于宝可梦Go的最短路径问题,其中牛牛需要在不同城市间移动以捕捉战斗力最高的宝可梦。文章通过Floyd算法求解最短路,并利用动态规划优化01背包问题,以降低时间复杂度至O(200k)。
摘要由CSDN通过智能技术生成

题目传送门


题目描述

牛牛所在的W市是一个不太大的城市,城市有n个路口以及m条公路,这些双向连通的公路长度均为1,保证你可以从一个城市直接或者间接移动到所有的城市。牛牛在玩宝可梦Go,众所周知呢,这个游戏需要到城市的各个地方去抓宝可梦,假设现在牛牛知道了接下来将会刷出k只宝可梦,他还知道每只宝可梦的刷新时刻、地点以及该宝可梦的战斗力,如果在宝可梦刷新时,牛牛恰好在那个路口,他就一定能够抓住那只宝可梦。

由于游戏公司不想让有选择恐惧症的玩家为难,所以他们设计不存在任何一个时刻同时刷出两只及以上的宝可梦。

假设不存在任何一个时刻会同时刷出两只宝可梦,牛牛一开始在城市的1号路口,最开始的时刻为0时刻,牛牛可以在每个时刻之前移动到相邻他所在位置的路口,当然他也可以保持原地不动,他现在想知道他能够捕获的宝可梦战斗力之和最大为多少?


输入描述:

第一行输入两个正整数 n , m , ( 1 ≤ n ≤ 200 , 0 ≤ m ≤ 10000 ) n,m,(1 \leq n \leq 200,0 \leq m \leq 10000) n,m,(1n200,0m10000)表示城市的路口数目以及公路数目。

接下来m行每行两个正整数 u , v ( 1 ≤ u , v ≤ n ) u,v(1 \leq u,v \leq n) u,v(1u,vn)表示一条长度为1链接两个路的公路。

接下来一行输入一个正整数 k ( 1 ≤ k ≤ 1 0 5 ) k(1 \leq k \leq 10^5) k(1k105)表示宝可梦的数目。

接下来输入k行,每行三个正整数 t i , p i , v a l i ( 1 ≤ p i ≤ n , 1 ≤ t i , v a l i ≤ 1 0 9 ) t_i,p_i,val_i(1 \leq p_i \leq n,1 \leq t_i,val_i \leq 10^9) ti,pi,vali(1pin,1t

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值