貪心(模擬費用流) NOIP2011 觀光公交

2022-03-30 14:44:16 字數 2130 閱讀 3290

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

任意時刻,公交車只能往前開,或在景點處等待。

設共有m 個遊客,每位遊客需要乘車1 次從乙個景點到達另乙個景點,第i 位遊客在ti 分鐘來到景點ai,希望乘車前往景點bi(ai<bi)。為了使所有乘客都能順利到達目的地,公交車在每站都必須等待需要從該景點出發的所有乘客都上車後才能出發開往下一景點

假設乘客上下車不需要時間。

乙個乘客的旅行時間,等於他到達目的地的時刻減去他來到出發地的時刻。因為只有一輛觀光車,有時候還要停下來等其他乘客,乘客們紛紛抱怨旅行時間太長了。於是聰明的司機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。共一行,包含乙個整數,表示最小的總旅行時間。

bus.in

bus.out

3 3 2

1 40 1 3

1 1 2

5 2 3

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%的資料,0<=k<=1;

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

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

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

這道題可以很容易地想到費用流做法,然後發現這個模型可以自己模擬費用流,複雜度小些。

1 #include 2 #include 3 #include 4

using

namespace

std;

5const

int n=1010;6

intlst[n],d[n],cd[n];

7int

beg[n],n,m,k,ans;

8int

in[n],out

[n],val[n];

9int

main()

21for(int i=2;i<=n;i++)

25while(k--)

30int pos=-1,tmp=0;31

for(int i=n-1;i>=1;i--)

38if(pos==-1)break

;39 d[pos]-=1;40

}41for(int i=1;i<=n;i++)

45 printf("

%d\n

",ans);

46return0;

47 }

NOIP2011選擇客棧 貪心

a color 記錄最後乙個顏色為 color 的客棧位置 num color 記錄當前顏色為 color 的客棧數量 last為距離 i 最近乙個符合消費的客棧位置 g color 為 受last限制下能夠符合的方案數 僅當 a color last 時 g color 可更新為a color 前...

NOIP2011 觀光公交(貪心)

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

NOIP2011模擬考試總結

這兩天的考了noip2011的6道題,600分的題大致得了420分左右。a了day1的t1,t2,day2的t1。這次模擬我感覺沒有發揮到自己的飽和水平,犯了非常傻比的錯。day1的第三題讀豎列時,題目說了以零結尾,我還手賤寫了個y 7,這樣如果這一列是滿的話,最後乙個0會被下一列讀進去。把y 7刪...