洛谷P1315 觀光公交

2022-04-01 12:49:35 字數 2191 閱讀 9030

風景迷人的小城y 市,擁有n 個美麗的景點。由於慕名而來的遊客越來越多,y 市特意安排了一輛觀光公交車,為遊客提供更便捷的交通服務。觀光公交車在第 0 分鐘出現在 1號景點,隨後依次前往 2、3 、4 ……n 號景點。從第 i 號景點開到第 i+1 號景點需要 di 分鐘。任意時刻,公交車只能往前開,或在景點處等待。

設共有m 個遊客,每位遊客需要乘車1 次從乙個景點到達另乙個景點,第i 位遊客在ti 分鐘來到景點 ai ,希望乘車前往景點bi (ai假設乘客上下車不需要時間。

乙個乘客的旅行時間,等於他到達目的地的時刻減去他來到出發地的時刻。因為只有一輛觀光車,有時候還要停下來等其他乘客,乘客們紛紛抱怨旅行時間太長了。於是聰明的司機zz給公交車安裝了 k 個氮氣加速器,每使用乙個加速器,可以使其中乙個 di 減1 。對於同乙個di 可以重複使用加速器,但是必須保證使用後di 大於等於0 。

那麼zz該如何安排使用加速器,才能使所有乘客的旅行時間總和最小?

輸入格式:

輸入檔名為bus.in。

第1 行是3 個整數n, m, k ,每兩個整數之間用乙個空格隔開。分別表示景點數、乘客數和氮氣加速器個數。

第2 行是n-1 個整數,每兩個整數之間用乙個空格隔開,第i 個數表示從第i 個景點開往第i+1 個景點所需要的時間,即 di 。

第3 行至m+2 行每行3 個整數 ti, ai, bi,每兩個整數之間用乙個空格隔開。第 i+2 行表示第i 位乘客來到出發景點的時刻,出發的景點編號和到達的景點編號。

輸出格式:

輸出檔名為bus.out。共一行,包含乙個整數,表示最小的總旅行時間。

輸入樣例#1:

3 3 2

1 40 1 3

1 1 2

5 2 3

輸出樣例#1:

10

【輸入輸出樣例說明】

對d2 使用2 個加速器,從2 號景點到 3 號景點時間變為 2 分鐘。

公交車在第1 分鐘從1 號景點出發,第2 分鐘到達2 號景點,第5 分鐘從2 號景點出發,第7 分鐘到達 3 號景點。

第1 個旅客旅行時間 7-0 = 7 分鐘。

第2 個旅客旅行時間 2-1 = 1 分鐘。

第3 個旅客旅行時間 7-5 = 2 分鐘。

總時間 7+1+2 = 10分鐘。

【資料範圍】

對於10% 的資料,k=0 ;

對於20% 的資料,k=1 ;

對於40% 的資料,2 ≤ n ≤ 50,1 ≤ m ≤ 1,000,0 ≤ k ≤ 20,0 ≤ di ≤ 10,0 ≤ t i ≤ 500;

對於60% 的資料,1 ≤ n ≤ 100,1 ≤ m ≤ 1,000,0 ≤ k ≤ 100 ,0 ≤ di ≤ 100,0 ≤ t i ≤ 10,000 ;

對於100%的資料,1 ≤ n ≤ 1,000,1 ≤ m ≤ 10,000 ,0 ≤ k ≤ 100,000,0 ≤ di ≤ 100 ,0 ≤ t i ≤ 100,000。

noip2011提高組day2第3題

/*

貪心,字首和記錄一段區間內的遊客數量,每次選擇遊客數量最多的區間進行加速

*/#include

#include

#define maxn 10001

using

namespace

std;

int n,m,k,d[1001],tim[maxn],st[maxn],ed[maxn],car[1001],g[1001],t[1001],sum[1001

];int

ans,fast,mx;

intmain()

for(int i=2;i<=n;i++)sum[i]+=sum[i-1

]; car[

1]=t[1

];

for(int i=2;i<=n;i++)car[i]=max(car[i-1],t[i-1])+d[i-1

];

for(int i=1;i<=m;i++)ans+=(car[ed[i]]-tim[i]);

while(k--)

ans-=mx;d[fast]--;

for(int i=2;i<=n;i++)car[i]=max(car[i-1],t[i-1])+d[i-1

]; }

printf(

"%d\n

",ans);

}

洛谷P1315 觀光公交

題目 模擬 貪心 一開始看到10 5的資料,以為要klogn就敲了個線段樹上去 結果沒考慮後效性,只過了3個點 正解 一開始先處理出每一站的到站時間是對的,而隨著修改到站時間的改變不一定滿足字首關係 假設在某一站有人很晚才出發,那不管先前改變了多少後面的到站時間都是不變的 綜上 還需要維護修改一段距...

洛谷P1315 觀光公交

題目 如果沒有氮氣加速器,則該題為乙個模擬題。但是本題存在氮氣加速器,所以我們需要考慮貪心策略。題目要求我們使所有人等待的時間最短,因此我們需要算出每段路徑 路徑即為車站之間的 d 對時間的貢獻多少,取其中最多的減去就好了。首先我們需要求出每個車站最遠向右影響到什麼地方,然後算出這段地方的影響總人數...

洛谷P1315 觀光公交

sb貪心.暴露了我 能力巨弱的本質。題面解 首先我們應該想到dp 但是我想到了貪心.然後分析題目本質,每個點有個限制,最早開走時間不得早於最晚上車時間。然後我們就可以把每個人看做都在那個時間上車。然後我們發現,對乙個地方使用加速,會影響它後面一段區間。然後就有個暴力 雛形是列舉在某個點用加速,看它能...