一道dp题,把问题分解为,到达每一个站点需要多少时间。到达一个站点的时间为dp[n],那么计算dp[n]之前dp[1 -> n - 1]应都为已知。那么记得把充电的时间算入(第一个不计)
/**
PROG:milk2
LANG:C++
ID:DickensTone
**/
#include<iostream>
#include<fstream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 102 + 5;
const int inf = 1 << 30 - 1;
int position[maxn];
double dp[maxn];
int main()
{
//freopen("milk2.in", "r", stdin);
//freopen("milk2.out", "w", stdout);
int dis;
while(scanf("%d", &dis) == 1)
{
int n, c, time;
int vr, vt1, vt2;
scanf("%d%d%d%d%d%d", &n, &c, &time, &vr, &vt1, &vt2);
for(int i = 1; i <= n; i++)
scanf("%d", &position[i]);
position[n + 1] = dis;
position[0] = 0;
dp[0] = 0;
double rabbit = (double) dis / vr;
for(int i = 1; i <= n + 1; i++)
{
dp[i] = inf;
for(int j = 0; j < i; j++)
{
int d = position[i] - position[j];
double t;
if(c >= d)
{
t = (double)d / vt1;
}
else
{
t = (double)c / vt1 + (double)(d - c) / vt2;
}
if(j)//特殊处理0站
t = t + time;
dp[i] = min(dp[i], t + dp[j]);
}
}
//printf("%lf", dp[n + 1]);
if(dp[n + 1] <= rabbit)
printf("What a pity rabbit!\n");
else printf("Good job,rabbit!\n");
}
return 0;
}