經典DP 龜兔賽跑

2021-07-11 01:24:19 字數 2636 閱讀 9568

description

據說在很久很久以前,可憐的兔子經歷了人生中最大的打擊――賽跑輸給烏龜後,心中鬱悶,發誓要報仇雪恨,於是躲進了杭州下沙某農業園臥薪嘗膽潛心修煉,終於練成了絕技,能夠毫不休息得以恆定的速度(vr m/s)一直跑。兔子一直想找機會好好得教訓一下烏龜,以雪前恥。 

最近正值hdu舉辦50周年校慶,社會各大名流齊聚下沙,兔子也趁此機會向烏龜發起挑戰。雖然烏龜深知獲勝希望不大,不過迫於**壓力,只能接受挑戰。 

比賽是設在一條筆直的道路上,長度為l公尺,規則很簡單,誰先到達終點誰就算獲勝。 

無奈烏龜自從上次獲勝以後,成了名龜,被一些八卦雜誌稱為「動物界的劉翔」,廣告不斷,手頭也有了不少積蓄。為了能夠再贏兔子,烏龜不惜花下血本買了最先進的**――「"小飛鴿"牌電動車。這輛車在有電的情況下能夠以vt1 m/s的速度「飛馳」,可惜電池容量有限,每次充滿電最多只能行駛c公尺的距離,以後就只能用腳來蹬了,烏龜用腳蹬時的速度為vt2 m/s。更過分的是,烏龜竟然在跑道上修建了很多很多(n個)的供電站,供自己給電動車充電。其中,每次充電需要花費t秒鐘的時間。當然,烏龜經過乙個充電站的時候可以選擇去或不去充電。 

比賽馬上開始了,兔子和帶著充滿電的電動車的烏龜並列站在起跑線上。你的任務就是寫個程式,判斷烏龜用最佳的方案進軍時,能不能贏了一直以恆定速度奔跑的兔子。

input

本題目包含多組測試,請處理到檔案結束。每個測試包括四行: 

第一行是乙個整數l代表跑道的總長度 

第二行包含三個整數n,c,t,分別表示充電站的個數,電動車衝滿電以後能行駛的距離以及每次充電所需要的時間 

第三行也是三個整數vr,vt1,vt2,分別表示兔子跑步的速度,烏龜開電動車的速度,烏龜腳蹬電動車的速度 

第四行包含了n(n<=100)個整數p1,p2...pn,分別表示各個充電站離跑道起點的距離,其中0

output

當烏龜有可能贏的時候輸出一行 「what a pity rabbit!"。否則輸出一行"good job,rabbit!"; 

題目資料保證不會出現烏龜和兔子同時到達的情況。

sample input

100

3 20 5

5 8 2

10 40 60

1003 60 5

5 8 2

10 40 60

sample output

good job,rabbit!

what a pity rabbit!

對於龜兔賽跑這個題, 根據題解的意思:應該講起點和終點也當做加油站,這樣整體就是乙個系統了;而對於此題,在加油站前選擇不選擇加油是這個題的關鍵;

而且相對之前的題, 這個也多了變數去累加最後比較;還需要考慮,兩個充電站之間的距離和充電隻後能跑的距離之間的關係;

所以得到兩個狀態:(dis為兩個加油站之間的距離)

如果可以跑到  t = 1.0*c/vt1+1.0*(dis-c)/vt2;

如果不行 t = 1.0*dis/vt1;

且如果選擇了加油, 記錄到已經花費的世界裡面,即為t ;

dp[i] 為到第i個加油站最少花費;則起點終點都有,則一共有n+2個;

這裡的起點實質為0 ,也就是出發後為:1~n+1 ;、

所以初始記錄加油站位置的狀態為:(num陣列記錄加油站的位置);

num[0] = 0 ;

num[n+1] = l

最後再計算到dp[n+1] 和 兔子時間比較就好  ;

ac**:

#include using namespace std ;

int l , n , c , t ,vr, vt1 ,vt2;

double t1 , t2 , mini ;

int p[200] ;//*加油站的位置;

double dp[105] ; //*dp[i]代表到第i個充電站所需要的最少時間;

int main()

p[0] = 0 ;//*起點也當做充電站

p[n+1] = l ;//*終點也當做充電站

dp[0] = 0 ;

mini = 99999999;

int dis ;

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

dp[i]=mini;

}t1 = 1.0 * l / vr; //*兔子用的時間

if(dp[n+1]>t1) //*如果烏龜的最少時間還比兔子多;

else printf("what a pity rabbit!\n");

}return 0 ;

}

杭電2059 經典DP 龜兔賽跑

龜兔賽跑 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 據說在很久很久以前,可憐的兔子經歷了人生中最大的打擊 賽跑輸給烏龜後,心中鬱悶,發誓要報仇雪恨,於是躲進了杭州下...

HDOJ 2059 龜兔賽跑 DP

4427480 2011 08 16 15 40 49 accepted 2059 15ms 176k 1191 b c ylwh 4427520 2011 08 16 15 43 31 accepted 2059 0ms 176k 1301 b c ylwh include include def...

HDU 2059 龜兔賽跑(dp)

description 據說在很久很久以前,可憐的兔子經歷了人生中最大的打擊 賽跑輸給烏龜後,心中鬱悶,發誓要報仇雪恨,於是躲進了杭州下沙某農業園臥薪嘗膽潛心修煉,終於練成了絕技,能夠毫不休息得以恆定的速度 vr m s 一直跑。兔子一直想找機會好好得教訓一下烏龜,以雪前恥。最近正值hdu舉辦50周...