大東亞海底隧道連線著廈門、新北、博艾、那霸、鹿兒島等城市,橫穿東海,耗資 1000 億博艾元,歷時 15 年,於公元 2058 年建成。憑藉該隧道,從廈門可以乘坐火車直達台灣、博艾和日本,全程只需要 4 個小時。
該鐵路經過 n 個城市,每個城市都有乙個站。不過,由於各個城市之間不能協調好,於是乘車每經過兩個相鄰的城市之間(方向不限),必須單獨購買這一小段的車票。第i段鐵路連線了城市i和城市 i+1(1 <= i < n)。如果搭乘的比較遠,需要購買多張車票。第 i 段鐵路購買紙質單程票需要 ai 博艾元。
雖然一些事情沒有協調好,各段鐵路公司也為了方便乘客,推出了 ic 卡。對於第 i 段鐵路,需要花 ci 博艾元的工本費購買一張 ic 卡,然後乘坐這段鐵路一次就只要扣 bi(bi < ai)元。ic 卡可以提前購買,有錢就可以從網上買得到,而不需要親自去對應的城市購買。工本費不能退,也不能購買車票。每張卡都可以充值任意數額。對於第 i 段鐵路的 ic 卡,無法乘坐別的鐵路的車。
uim 現在需要出差,要去 m 個城市,從城市 p1 出發分別按照 p1,p2,p3…pm 的順序訪問各個城市,可能會多次訪問乙個城市,且相鄰訪問的城市位置不一定相鄰,而且不會是同乙個城市。
現在他希望知道,出差結束後,至少會花掉多少的錢,包括購買紙質車票、買卡和充值的總費用。
第一行兩個整數,n,m。
接下來一行,m個數字,表示pi
接下來 n - 1 行,表示第i段鐵路的 ai,bi,ci
乙個整數,表示最少花費
輸入樣例
9 10
3 1 4 1 5 9 2 6 5 3
200 100 50
300 299 100
500 200 500
345 234 123
100 50 100
600 100 1
450 400 80
2 1 10
輸出樣例2 到 3 以及 8 到 9 買票,其餘買卡。
對於 30% 資料 m = 2
對於另外 30% 資料 n <= 1000 ,m <= 1000
對於100%的資料 m,n <= 100000,ai,bi,ci <= 100000
可以先用字首和與差分求出每一段需要經過的次數,然後再用貪心策略在兩種買票方式上進行選取。
#include
using
namespace std;
long
long n,m,p[
100005
],a[
100005
],b[
100005
],c[
100005
],d[
100005];
intmain()
for(
int i=
1;i<=n-
1;i++
)memset
(d,0
,sizeof
(d))
;for
(int i=
1;i)else
}for
(int i=
1;i<=n;i++
)long
long sum=0;
for(
int i=
1;i<=n-
1;i++
) cout
}
海底高鐵(差分)
題目背景 大東亞海底隧道連線著廈門 新北 博艾 那霸 鹿兒島等城市,橫穿東海,耗資1000億博艾元,歷時15年,於公元2058年建成。憑藉該隧道,從廈門可以乘坐火車直達台灣 博艾和日本,全程只需要4個小時。題目描述 該鐵路經過n個城市,每個城市都有乙個站。不過,由於各個城市之間不能協調好,於是乘車每...
P3406 海底高鐵 差分
題目背景 大東亞海底隧道連線著廈門 新北 博艾 那霸 鹿兒島等城市,橫穿東海,耗資1000億博艾元,歷時15年,於公元2058年建成。憑藉該隧道,從廈門可以乘坐火車直達台灣 博艾和日本,全程只需要4個小時。題目描述 該鐵路經過n個城市,每個城市都有乙個站。不過,由於各個城市之間不能協調好,於是乘車每...
洛谷 P3406 海底高鐵 差分
p3406 海底高鐵 基本思路 對於其中一小段,我們要麼全部買紙票,要麼全部刷卡。所以我們只需要統計每一小段經過的總次數。如果你暴力模擬統計的話,估計 一定會tle。接下來來看一組例子 六個數 0 0 0 0 0 0 如果想讓它從第二個到第五個數全部 1,則為 0 1 1 1 1 0 如果這樣模擬 ...