HDU 4526 威威貓系列故事 拼車記

2021-06-13 10:42:14 字數 1764 閱讀 9194

解題思路:用動態規劃既可以解決。opt[i,j]代表在[t(1),t(2),......t(i)]時刻內走j個人所需的最小花費。

顯然地推關係式如下:   opt[i,j] = min (opt[i-1][j], opt[i-1,j-k]+k*t(i)+d);(其中k代表t(i)時刻上車的人數,小於等於z(i)),

opt[i,j]至於當前輸入有關所以可以只用乙個變數表示而不用陣列節約記憶體。**如下:

#include #include #include using namespace std;

const int maxn = 101;

const int maxnum = 9999999;

int opt[maxn][maxn];

int n, k, d, s;

int t, z;

int main ()

if (opt[i][j] == maxnum)

break;

}} if (opt[k][n] == maxnum)

printf ("impossible\n");

else

printf ("%d\n", opt[k][n]);

} return 0;

}

problem description

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

問題來了,一輛又一輛的計程車經過,但裡面要麼坐滿了乘客,要麼只剩下一兩個座位,眾acmer都覺得坐上去太虧了,威威貓也是這麼想的。

假設n名acmer準備拼車,此時為0時刻,從校門到目的地需要支付給計程車師傅d元(按車次算,不管裡面坐了多少acmer),假如s分鐘後恰能趕上比賽,那麼s分鐘後經過校門口的計程車自然可以忽略不計了。現在給出在這s分鐘當中經過校門的所有的k輛計程車先後到達校門口的時間ti 及裡面剩餘的座位zi (1 <= zi <= 4),acmer可以選擇上車幾個人(不能超過),當然,也可以選擇上0個人,那就是不坐這輛車。

俗話說,時間就是金錢,這裡威威貓把每個acmer在校門等待計程車的分鐘數等同於花了相同多的錢(例如威威貓等待了20分鐘,那相當於他額外花了20元錢)。

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

input

輸入第一行為t,表示有t組測試資料。每組資料以四個整數n , k , d , s開始,具體含義參見題目描述,接著k行,表示第i輛計程車在第ti分鐘到達校門,其空餘的座位數為zi(時間按照先後順序)。

[technical specification]

t <= 50

n <= 100

k <= 100

d <= 100

s <= 100

1 <= zi <= 4

1<= t(i) <= t(i+1) <= s

output

對於每組測試資料,輸出佔一行,如果他們所有人能在比賽前到達比賽地點,則輸出乙個整數,代表他們最少需要花的錢(單位:元),否則請輸出「impossible」。 

sample input

1

2 2 10 5

1 12 2

sample output

14

hdu 4526 威威貓系列故事 拼車記

我的二維條件是i代表第i輛車,j代表總共載走j個人,狀態轉移陣列代表到第i輛為止載走j個人所花費的最少金錢。m i j min m i 1 j m i 1 j 1 ti 1 d,m i 1 j 2 ti 2 d,m i 1 j zi d include include 第一道完全自己分析的動態規劃!...

HDU 4526 威威貓系列故事 拼車記(DP)

click here 題意 中文題。解題思路 題目不難,但還是錯了 1 次,想了好久。令 dp i j 表示前 i 輛車還剩 j 個人的最少花費。想到乙個貪心的策略是,如果選擇坐這輛車,那麼肯定坐的人越多越好,因為在後面坐會增加這個人等待時間的花費。但有乙個地方需要特判,就是 j 0 時的狀態不一定...

HDU 威威貓系列故事 籃球夢

威威貓十分迷戀籃球比賽,是忠實的nba球迷,他常常幻想自己那肥碩的身軀也能飛起扣籃。另外,他對籃球教練工作也情有獨鍾,特別是對比賽的戰術,投籃選擇方面也是很有研究,下面就是威威貓研究過的乙個問題 一場nba籃球比賽總共48分鐘,假如我們現在已經知道當前比分 a b,a代表我方的比分,b代表對方的比分...