100
3 20 5
5 8 2
10 40 60
100
3 60 5
5 8 2
10 40 60
Good job,rabbit! What a pity rabbit! 这道题要注意了,每次状态判断点不是在第i个加油站,判断是否需要加油,我刚开始就这么想的结果WA// 这个是错误的代码,让大家引以为戒的= 。- #include <iostream> using namespace std; int len,n,c,t,vr,vt1,vt2; int station[101]; double dp(double surplus_gass,int now) { if(now==n+1) return 0; double t1,t2,sur_t1,sur_t2; int dis; // 求出这个加油站与下一个加油站间距 dis=station[now+1]-station[now]; // 如果剩余的油足够到下一个加油站 if(surplus_gass>=dis) return dp(surplus_gass-dis,now+1)+dis/double(vt1); // 剩余的有不能支持到下一个加油站 else { // t1求 不加油,将剩余油用完,然后不用车到下一个加油站的时间 t1=surplus_gass/vt1+(dis-surplus_gass)/vt2; sur_t1=0; // t2求 加油后 到下一个加油站的时间 // 判断到下一个加油站的距离是否大于加满油后能行驶的距离 if(dis<=c) { t2=t+c/double(vt1); sur_t2=c-dis; } else { t2=t+c/double(vt1)+(dis-c)/vt2; sur_t2=0; } if(t2<=t1) return dp(sur_t2,now+1)+t2; else return dp(sur_t1,now+1)+t1; } } int main() { int i; double time_r,time_tur; while(cin>>len) { memset(station,0,sizeof(station)); cin>>n>>c>>t; cin>>vr>>vt1>>vt2; for(i=1;i<=n;++i) cin>>station[i]; station[0]=0; station[n+1]=len; time_r=len/vr; time_tur=dp(c,0); if(time_r<time_tur) cout<<"Good job,rabbit!"<<endl; else cout<<"What a pity rabbit!"<<endl; } return 0; }
而是,在第i点判断,从j点到i点(j<i)花费的时间,哪个更少。知道了这点以后,当然很快就会AC咯#include <iostream> using namespace std; int len,n,c,t,vr,vt1,vt2; double dp[105]; int station[105]; // min函数,不多解释了= = double min(double a,double b) { return (a>b)?b:a; } int main() { int i,j; double time_r; while(cin>>len) { // 初始化dp数组,让所有dp[i]为最大值,因为下面要进行min函数 for(i=0;i<105;++i) dp[i]=0xfffffff; // 相应输入 cin>>n>>c>>t; cin>>vr>>vt1>>vt2; for(i=1;i<=n;++i) cin>>station[i]; // 第一个起点为0,终点n+1为赛道总长len,dp[0]=0 station[0]=0; station[n+1]=len; dp[0]=0; // 兔子所用的时间,要*1.0,否则可能不是小数哟 time_r=len*1.0/vr; for(i=1;i<=n+1;++i) { for(j=0;j<i;++j) { double dis,tme; dis=station[i]-station[j]; // 判断从j到i能否直接骑电动车到达 if(dis<=c) tme=dis*1.0/vt1+t; else tme=t+c*1.0/vt1+(dis-c)*1.0/vt2; // 因为j是起点的时候,就不需要花时间加油了,本来就是满油的 if(j==0) tme-=t; dp[i]=min(dp[i],dp[j]+tme); } } if(dp[n+1]>time_r) cout<<"Good job,rabbit!"<<endl; else cout<<"What a pity rabbit!"<<endl; } return 0; }
ACM-DP之龟兔赛跑——hdu2059,布布扣,bubuko.com
原文:http://blog.csdn.net/lttree/article/details/20002265