P1977 計程車拼車

2021-09-07 15:34:54 字數 1535 閱讀 9245

話說小 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 12 2

輸出樣例#1: 

複製

14

洛谷題解:

竟然沒人寫題解

f[i][j]表示前i輛車走了j個oier 狀態轉移方程也不難想 其實很難

f[i][j]=min(f[i-1][j-k]+k*t[i]+d,f[i][j])(1<=k<=min(j,z[i]))

附上**

1 #include2 #include3

#define maxn 101

4using

namespace

std;

5int

n,k,d,s,f[maxn][maxn];

6struct

nodea[maxn];

9int

main()

20if(f[k][n]>=10000)cout<<"

impossible";

21else cout<22return0;

23 }

dp訓練 P1977 計程車拼車

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

無聊測試賽 T3 計程車拼車

又是乙個典型的揹包.注意貪心思路 如果你要做這輛車,你就坐滿他.i,j 分別存坐上去的人總人數和現在的時間 dp i j 統計來到這個狀態的最小錢數 include include include using namespace std const int maxn 1e2 5 int n,k,d,...

7 2 計程車計價

本題要求根據某城市普通計程車收費標準編寫程式進行車費計算。具體標準如下 起步里程為3公里,起步費10元 超起步里程後10公里內,每公里2元 超過10公里以上的部分加收50 的回空補貼費,即每公里3元 營運過程中,因路阻及乘客要求臨時停車的,按每5分鐘2元計收 不足5分鐘則不收費 輸入格式 輸入在一行...