2 条题解
-
0
何老师 (root) LV 0 MOD @ 2025-06-21 10:39:11
处理: dp[i][j] 表示 到达 i 点剩余油量为j的时候的最小花费。 转移的时候只有两种情况:加油或者出发去下一节点。 加油时候只需要考虑加1升即可。因为如果加两升可以达到最优状态,那么加1升的状态再加1升同样可以扩展到最优状态。 出发去下一节点的时候,费用不变,剩余油量减少,油量不够不能到达。 但是不好找到最优状态,所以要用节点存储状态,然后用优先队列,每次弹出的节点一定是最优状态。
使用链式前向星存图(head[x]要从-1开始因为节点可能为0),cost[i]为油价。
其中iny(int x,int y,int z):u(x),d(y),p(z){}代表将u,d,p分别赋值为x,y,z。
-
02025-05-29 17:35:33@
uva 11367
题意:一辆汽车在一张无向图中开告诉你每个城市加油的费用。每次给q个查询(起点,终点,油箱容量)问你最小花费是多少。
思路:一道Dijkstra状态的题目。在这种最短路问题中一维的dis数组记录的信息往往不能很好的解决问题,所以我们要给dis数组增加维数来使每个状态唯一。这其实就是结合了动态规划的思想,然后考虑每个状态能怎么转移(这其实就是单个结点从队列中弹出来的处理过程)
对于这道题,我们增加一维表示当前汽车的剩油量,然后每个状态有两种转移方式1.直接开去下一个节点2.一格一格加油。最后统计一下目标节点所有油量的花费最小值,就能得出答案了。
- 1