傳送門
n和k都不大
可以跑分層圖
設dis[ i ] [ j ] [ k ] 表示從起點到座標為 i , j 的點,還剩下可以跑 k 步的油時的最少花費
然後用 dijkstra 跑分層圖
走下一步時就分開來討論每種可能的操作
但是一定要注意每種操作的順序
先走,然後考慮走到的這點要不要設加油站,再考慮走到的這點有沒有加油站
如果有加油站,就一定要交錢(強買強賣...)
發現題目沒說每個油庫是不是只能用一次
但是為了最優解顯然不能重複用
所以根本不用考慮之前新設立了哪些加油站
細節在**
#include#include#include
#include
#include
#include
using
namespace
std;
intn,k,a,b,c;
int xx[4]=,yy[4]=;
int dis[107][107][17
];int mp[107][107];//
存地圖狀態
struct
node
};priority_queue
q;void
dijk()
); dis[1][1][k]=0;//
一開始油是滿的,題目限制起點和終點沒有油庫
while(!q.empty())
);//
如果有油庫一定要加油
if(!mp[x][y])
);//
不設油庫
if(dis[x][y][k]>cost+a+c) q.push( (node) );//
設油庫}}}
}int
main()
P4009 汽車加油行駛問題
看了很多題解,無論什麼解法都繞不開分層圖 在本題中加滿油的車每次可以移動k步,那麼我們就可以建立乙個k 1層的分層圖,表示汽車油量k的狀態 油量0 k 然後根據題目要求建圖 首先我們規定 k從1開始 第k層第i行第j列點編號為 k 1 n n i 1 n j 首先我們從第k層 i,j 建立一條邊到第...
P4009 汽車加油行駛問題
題意 給定乙個 n n n n 的方形網格,設其左上角為起點,座標為 1,1 1,1 x x 軸向右為正,y y 軸向下為正,每個方格邊長為 1 1 一輛汽車從起點出發駛向右下角終點 n,n n,n 在若干個網格交叉點處,設定了油庫。汽車在行駛過程中應遵守如下規則 汽車只能沿網格邊行駛,裝滿油後能行...
洛谷P4009 汽車加油行駛問題
給定乙個 n times nn n 的方形網格,設其左上角為起點 座標 1,1 1,1 xx 軸向右為正,yy 軸向下為正,每個方格邊長為 11 如圖所示。一輛汽車從起點 出發駛向右下角終點 其座標為 n,n n,n 在若干個網格交叉點處,設定了油庫,可供汽車在行駛途中加油。汽車在行駛過程中應遵守如...