Hdu2059 龟兔赛跑
之前看过了几个经典的dp模型,现在用这道简单题目来练练手。
题目描述
长为L的跑道,兔子速度为vr,乌龟可以骑电动车,续航为C,当车有电时,速度为Vt1,没电时速度为Vt2,为了保证续航,乌龟在赛道上安装了N个充电桩,每次路过时,都可以选择充电或者不冲,充电时间为T,距离数组Pi代表了从起点到第i个充电桩的距离,求给定条件下比赛结果。
题目分析
和之前的背包问题类似,在经过第i个充电桩的距离s[i]=p[i]-p[i-1]的过程中,乌龟电动车剩余电源与路程必有如下两种关系:
1.乌龟电动车剩余电源不足以支持其走完s[i]这段路程,那么其将要步行一段距离s[i]-c,在充电桩时选择充电或者不冲;
2,乌龟剩余电动车电源c>=s[i],那么此段距离将全程以速度Vt1完成,并且剩余电源c‘=c-s[i],在充电桩选择充电或不冲;
3,当乌龟选择充电时,总时间+T,剩余电源c=C,充满状态;
递归描述
float res(int i,float c){
float rec=0.0;
if(i==N+1){
rec=0.0;}
else if(c<s[i]){
rec=min((c/vt1+(s[i]-c)/vt2+res(i+1,0)),(c/vt1+(s[i]-c)/vt2+T+res(i+1,C)));}
else{
rec=min((s[i]/vt1+res(i+1,c-s[i])),(s[i]/vt1+T+res(i+1,C)));}
return rec;
}