題意:給定乙個 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最短路即可。
#includeusingnamespace
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 在若干個網格交叉點處,設定了油庫,可供汽車在行駛途中加油。汽車在行駛過程中應遵守如...