TZC OJ 1408 龟兔赛跑

 本题主要用到了动态规化的思想,有一定有编程要求.

AC CODE:

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int i, j;
 8     int n;
 9     int N, C, T;// N:充电站点, C:电动车冲满电后行驶的距离, T:每次充电所需要的时间
10     int L, VR, VT1, VT2;//L:路长, VR:兔子跑步的速度, VT1:乌龟开电动车的速度, VT2:乌龟脚蹬电动车的速度
11     int station[105], s;// station保存路中的充电站点离起始点的距离
12     double time, Min;
13     double dp[105];
14     while (cin>>L)
15     {
16         cin>>N>>C>>T;
17         cin>>VR>>VT1>>VT2;
18         memset(dp, 0, sizeof(dp));
19         memset(station, 0, sizeof(station));
20         for(i = 1; i <= N; ++i)
21         {
22             cin>>station[i];
23         }
24 
25         station[N+1] = L;// 设终为最后一个充电站点
26 
27         for (i = 1;i <= N + 1; ++i)
28         {
29             Min = 0x7fffffff;// 取一个很大的值
30             for (j = 0; j < i; ++j)// 计算每次从第0个站点(出发站点)出发到目前站点的time
31             {
32                 if (station[i] - station[j] > C)// 如果两个站点间距离比满电状态能行驶距离大
33                 {
34                     time = 1.0 * C / VT1 + (station[i] - station[j] - C) * 1.0 / VT2;
35                 }
36                 else// 如果两个站点间距离比满电状态能行驶距离小
37                 {
38                     time = 1.0 * (station[i] - station[j]) / VT1;
39                 }
40                 if (j)// 不是在初始站的充满电都要加上充电时间
41                 {
42                     time += T;
43                 }
44                 time += dp[j];
45                 Min = min(Min, time);
46             }
47             dp[i] = Min;// 记录乌龟到每个站点的最小时间
48         }
49         if (dp[N+1] < 1.0 * L / VR)
50         {
51             cout<<"What a pity rabbit!"<<endl;
52         }
53         else
54         {
55             cout<<"Good job,rabbit!"<<endl;
56         }
57     }
58     return 0;
59 }

 

你可能感兴趣的:(OJ)