首页 > 其他 > 详细

ZJNU 1130 - 龟兔赛跑——中高级

时间:2020-01-19 13:35:46      阅读:77      评论:0      收藏:0      [点我收藏+]

只需求出乌龟最短耗时跟兔子耗时比即可
将起点 0 和终点 N+1 也看做充电站,进行动态规划
对第i个点进行动态规划,则可以得到状态转移方程为
dp[i] = max{dp[j]+time[i][j]} j∈[0,i]
time[i][j]=max(不充电从i到j耗时 , 在i充满电后再到j耗时)
最后将dp[N+1]与兔子耗时对比

 1 /*
 2 Written By. StelaYuri
 3 */
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 int main(){
 8     int L,N,C,T,VR,VT1,VT2,p[105],i,j,dis;
 9     double time,dp[105];
10     while(cin>>L>>N>>C>>T>>VR>>VT1>>VT2){
11         for(i=1;i<=N;i++)
12             cin>>p[i];
13         p[0]=0;
14         p[N+1]=L;
15         fill(dp,dp+105,1e9);
16         dp[0]=0.0;
17         for(i=1;i<=N+1;i++)
18             for(j=0;j<i;j++){
19                 time=T;
20                 dis=p[i]-p[j];
21                 if(!j)
22                     time=0.0;
23                 if(dis<=C)
24                     time+=1.0*dis/VT1;
25                 else
26                     time+=1.0*C/VT1+1.0*(dis-C)/VT2;
27                 dp[i]=min(dp[i],dp[j]+min(time,1.0*dis/VT2));
28             }
29         if(dp[N+1]<1.0*L/VR)
30             cout<<"What a pity rabbit!\n";
31         else
32             cout<<"Good job,rabbit!\n";
33     }
34     
35     return 0;
36 }

ZJNU 1130 - 龟兔赛跑——中高级

原文:https://www.cnblogs.com/stelayuri/p/12213260.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!