1. 程式人生 > >洛谷—— P1977 出租車拼車

洛谷—— P1977 出租車拼車

ref bsp 例如 pre 表示 col tchar 又一 color

https://www.luogu.org/problem/show?pid=1977

題目背景

話說小 x 有一次去參加比賽,雖然學校離比賽地點不太遠,但小 x 還是想坐 出租車去。大學城的出租車總是比較另類,有“拼車”一說,也就是說,你一個人 坐車去,還是一堆人一起,總共需要支付的錢是一樣的(每輛出租上除司機外最 多坐下 4 個人)。剛好那天同校的一群 Oier 在校門口紮堆了,大家果斷決定拼車 去賽場。

問題來了,一輛又一輛的出租車經過,但裏面要麽坐滿了乘客,要麽只剩下 一兩個座位,眾 Oier 都覺得坐上去太虧了,小 x 也是這麽想的。

題目描述

假設 N 位 Oier 準備拼車,此時為 0 時刻,從校門到目的地需要支付給出租

車師傅 D 元(按車次算,不管裏面坐了多少 Oier),假如 S 分鐘後恰能趕上比賽,

那麽 S 分鐘後經過校門口的出租車自然可以忽略不計了。現在給出在這 S 分鐘當

中經過校門的所有的 K 輛出租車先後到達校門口的時間 T i 及裏面剩余的座位 Zi

(1 <= Zi <= 4),Oier 可以選擇上車幾個人(不能超過),當然,也可以選擇上 0 個

人,那就是不坐這輛車。

俗話說,時間就是金錢,這裏小 x 把每個 Oier 在校門等待出租車的分鐘數 等同於花了相同多的錢(例如小 x 等待了 20 分鐘,那相當於他額外花了 20 元錢)。

在保證所有 Oier 都能在比賽開始前到達比賽地點的情況下,聰明的你能計 算出他們最少需要花多少元錢麽?

輸入輸出格式

輸入格式:

每組數據以四個整數 N , K , D , S 開始,具體含義參見題目描述。

接著 K 行,表示第 i 輛出租車在第 Ti 分鐘到達校門,其空余的座位數為 Zi

(時間按照先後順序)。

N <= 100,K <= 100,D <= 100,S <= 100,1 <= Zi <= 4,1<= T(i) <= T(i+1) <= S

輸出格式:

對於每組測試數據,輸出占一行,如果他們所有人能在比賽前到達比賽地點,

則輸出一個整數,代表他們最少需要花的錢(單位:元),否則請輸出“impossible”。

輸入輸出樣例

輸入樣例#1:
2 2 10 5
1 1
2 2
輸出樣例#1:
14



f[i][j]表示前i輛車,運了j個人的最小花費,初始化就是把f[0][i]附成極大值,畢竟沒車的時候沒法運人
f[i][j]=min(f[i-1][j-k]+k*t[i]+d,f[i][j])、
 1 #include <cstdio>
 2 
 3 #define max(a,b) (a>b?a:b)
 4 #define min(a,b) (a<b?a:b)
 5 
 6 inline void read(int &x)
 7 {
 8     x=0; register char ch=getchar();
 9     for(; ch>9||ch<0; ) ch=getchar();
10     for(; ch>=0&&ch<=9; ch=getchar()) x=x*10+ch-0;
11 }
12 const int N(110);
13 int n,m,d,s,t[N],z[N];
14 int tot,f[N][N];
15 
16 int Presist()
17 {
18     read(n),read(m),read(d),read(s);
19     for(int i=1; i<=m; ++i) read(t[i]),read(z[i]),tot+=z[i];
20     if(tot<n) { printf("impossible\n"); return 0; }
21     for(int i=1; i<=n; ++i) f[0][i]=0x3f3f3f3f;
22     for(int i=1; i<=m; ++i)
23       for(int j=1; j<=n; ++j)
24       {
25           f[i][j]=f[i-1][j];
26         for(int k=1; k<=min(j,z[i]); ++k)
27             f[i][j]=min(f[i][j],f[i-1][j-k]+k*t[i]+d);
28       }
29     printf("%d\n",f[m][n]);
30     return 0;
31 }
32 
33 int Aptal=Presist();
34 int main(int argc,char**argv){;}

洛谷—— P1977 出租車拼車