hdu 2059 龜兔賽跑 動規問題

2021-06-10 04:51:12 字數 1228 閱讀 5231

首先 這個題目我並沒有用動規的思想來做,自己寫了個程式 手動模擬加油與不加油的情況,並在每次取得較小值,

在樣本資料中演示毫無壓力,但是提交的時候wa了 , 仔細看了題幹條件  猜了一些測試資料,還是沒錯,所以不知道哪個地方錯了

還麻煩能找到特殊資料證明我這個程式錯誤的大大多多指教,謝謝了!

源**如下:

#include

#define num 100

int p[num+10];

double calculate(int n,int c,int t,int vt1,int vt2,int l)

else

}else

else

if(x2<=cc2)

else

if(time1

else}}

if(i==n)

else

if(x2<=cc2)

else

if(time1time+=time1;

else

time+=time2;

return time;}}

int main()

return 0;

}既然這個在oj上提交顯示錯誤,那沒辦法了,只能選擇用動規的思想來做了

f[n+2]表示每個加油站所用的最小的時間,起點和終點也算成兩個加油站,在i每次到了乙個點的時候,

取j從0開始到i-1的站,在每個站計算當前j到i加油站的時間,然後取值f[i]=min(f[i],f[j]+time)

子問題是f[i]肯定包含了f[j]的最小時間,用剪貼思想即可想到

該程式從表面上看是在每個點都加了油,但是其實是這樣的:

i=4 j=1時,從1加油站開始加滿油 跑到第四個加油站了,這個中間包含了在2 3 加油站有沒有加油的情況,在每次讀表的時候都取到了當前的最小值

這裡面就包含了在各個站加或不加的情況了

源**如下:

#include

#define num 100

#define int_max 999999999

int p[num+10];

double f[num+10];

int main()

if(f[n+1]>(double)l/vr)

printf("good job,rabbit!\n");

else

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

}return 0;

}

HDU 2059(龜兔賽跑)動態規劃

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

HDU 2059 龜兔賽跑(動態規劃)

龜兔賽跑 input output sample input 1003 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 解析 動態規劃比較經典的一題,起點作為起...

hdu 2059 龜兔賽跑

題目是動歸,狀態是比較輕鬆能夠分出來的。總的來說就是每乙個加油點是乙個狀態,比如i點就由之前i 1個點確定,從起點到i 1每個點都走到i點一次,求出最小的時間,儲存在i點。需要注意的起點的處理以及終點。題目思路挺清晰的,只要注意下細節,給dp入門做練習還是挺不錯的。include include u...