题解

2 条题解

  • 0
    @ 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。

  • 0
    @ 2025-05-29 17:35:33

    uva 11367

    题意:一辆汽车在一张无向图中开告诉你每个城市加油的费用。每次给q个查询(起点,终点,油箱容量)问你最小花费是多少。

    思路:一道Dijkstra状态的题目。在这种最短路问题中一维的dis数组记录的信息往往不能很好的解决问题,所以我们要给dis数组增加维数来使每个状态唯一。这其实就是结合了动态规划的思想,然后考虑每个状态能怎么转移(这其实就是单个结点从队列中弹出来的处理过程)

    对于这道题,我们增加一维表示当前汽车的剩油量,然后每个状态有两种转移方式1.直接开去下一个节点2.一格一格加油。最后统计一下目标节点所有油量的花费最小值,就能得出答案了。

  • 1

信息

ID
2053
难度
9
分类
图结构 | 最短路 点击显示
标签
递交数
4
已通过
1
通过率
25%
被复制
3
上传者