題比較好,需要比較強的剪枝,
題意: 有一條路,每個點有一個加油站,第i個加油站加油是w[i]每單位的油,沒走一個單位的距離花費1個單位的油,現在已知起點和終點,給你一輛車,並且車的載油量有限爲c,求從起點到終點的最小花費。
開始能想到是狀態dp+spfa 但是超時了,寫的是100*100*1000*k的方法,這道題需要使你的更新從小的往大的更新,這樣纔能有效的避免很多重複狀態,而且如果更新無序的話,也會使後面的狀態提前更新,這樣會很浪費時間。
爲了讓更新從小的開始,而且每種狀態只更新一次,首先肯定是要讓現在花費小的先更新,所以要用優先隊列。
然後爲了讓對於每個節點往其他節點更新不用枚舉各個狀態如果可以,可以放進隊列裏面這樣也可以省去狀態枚舉的地方,充分利用了隊列。
感覺這道題的思路非常好