Problem
在一個沙漠中,有 N 個綠洲,每一個綠洲只有水源可以獲取使用,食物可以從起點城鎮帶過來存放,但是綠洲本身不帶有食物獲取,每走一步將會損耗單位水和食物,身上負重最多 W,你可以攜帶一部分食物放置在綠洲,然後走回起點再帶食物過來存放,要推進到終點,至少要從城鎮中購買多少食物。
Sample Input
|
|
Sample Output
|
|
Solution
很簡單想的,我們只能從終點逆推回來,我們考慮綠洲 u 到終點 end 的最少食物花費 cost_u,現在考慮從 v 點到 u 再到 end,如果 cost_u 加上 e(v, u) 的花費不超過負重,則可以得知直接從 v 攜帶 cost_u 的食物量。
如果 cost_u 太大,則表示必須來來往往於 u, v 之間,而每一趟 v->u->v,攜帶路徑花費 1 倍水、 2 倍食物 (在 u 那邊打水即可),剩下的空間為一次運送的食物量 (放置在 u 儲存)。最後一趟,則不考慮回程,額外可以增加攜帶食物量。
|
|