HDU 2059 龟兔赛跑(动态规划)

2019-04-13 21:34发布

题目: http://acm.hdu.edu.cn/showproblem.php?pid=2059
题目大意: 乌龟骑电动车每到一个充电站可选择充电或者不充,充电时间T,充完一次电可有电行驶距离C,有电行驶速度vr1,无电行驶速度vr2,p[1...N]为每个充电站到起点的距离,跑道总长为L,兔子速度为vr,求乌龟采用最佳策略是否能比兔子早到终点。 思: 起点无需充电已满(这里题目不严密未给出),dp[0]=0,dp[i]为乌龟到第i充电站所需时间,则dp[n]=min(dp[i]+time),time为从第i个充电站充完电到第n个充电站所需时间。 代码: #include double p[105]; double dp[105]; int main() { double L; int N; double C,T; double vr,vt1,vt2; while(~scanf("%lf",&L)) { scanf("%d%lf%lf",&N,&C,&T); scanf("%lf%lf%lf",&vr,&vt1,&vt2); int i,j; double rtime; rtime=L/vr;//兔子跑完全程时间 for(i=1;i<=N;i++) { scanf("%lf",&p[i]); } p[0]=0; p[N+1]=L; dp[0]=0; int flag=0; for(i=1;i<=N+1;i++) { dp[i]=rtime+1;//初始化成比兔子晚到的时间 for(j=0;jrtime) { flag=1; break; } } if(flag) { printf("Good job,rabbit! "); } else printf("What a pity rabbit! "); } return 0; }