P4009 汽車加油行駛問題

2022-04-30 21:54:15 字數 1196 閱讀 7409

題意:給定乙個 n×n

'>n×n

的方形網格,設其左上角為起點,座標為 (1,

1)'>(1,1)

,x'>x

軸向右為正, y

'>y

軸向下為正,每個方格邊長為 1

'>

1 。 一輛汽車從起點出發駛向右下角終點 (n,

n)'>(n,n)

。 在若干個網格交叉點處,設定了油庫。汽車在行駛過程中應遵守如下規則:汽車只能沿網格邊行駛,裝滿油後能行駛 k

'>

k 條網格邊;出發時汽車已裝滿油,在起點與終點處不設油庫; 汽車經過一條網格邊時,若其x

'>

x 座標或 y

'>

y 座標減小,則應付費用 b

'>

b ,否則免付費用; 汽車在行駛過程中遇油庫則應加滿油並付加油費用 a

'>a

;在需要時可在網格點處增設油庫,並付增設油庫費用 c

'>

c (不含加油費用 a

'>

a )。 求出汽車從起點出發到達終點的一條所付費用最少的行駛路線。

設計好狀態直接跑dijkstra最短路即可。

#includeusing

namespace

std;

const

int n=110

;const

int inf=0x3f3f3f3f

;const

int dx=;

const

int dy=;

intn,k,a,b,c,mp[n][n];

struct

node

node(

int x,int y,int k,int

d) : x(x),y(y),k(k),d(d) {}

bool

operator

< (const node &rhs) const

};int d[n][n][15]; bool vis[n][n][15

];priority_queue

q; int

dijkstra()

if (tmp}

if (u.k==0 && mp[u.x][u.y]==0) }}

return

ret;

}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和k都不大 可以跑分層圖 設dis i j k 表示從起點到座標為 i j 的點,還剩下可以跑 k 步的油時的最少花費 然後用 dijkstra 跑分層圖 走下一步時就分開來討論每種可能的操作 但是一定要注意每種操作的順序 先走,然後考慮走到的這點要不要設加油站,再考慮走到的這點有沒有加油...

洛谷P4009 汽車加油行駛問題

給定乙個 n times nn n 的方形網格,設其左上角為起點 座標 1,1 1,1 xx 軸向右為正,yy 軸向下為正,每個方格邊長為 11 如圖所示。一輛汽車從起點 出發駛向右下角終點 其座標為 n,n n,n 在若干個網格交叉點處,設定了油庫,可供汽車在行駛途中加油。汽車在行駛過程中應遵守如...