話說小 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 51 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分鐘則不收費 輸入格式 輸入在一行...