P4009 汽車加油行駛問題

2022-05-20 02:11:15 字數 933 閱讀 2099

傳送門

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 在若干個網格交叉點處,設定了油庫,可供汽車在行駛途中加油。汽車在行駛過程中應遵守如...