简单dp题目(不过我是弱菜,看了好久。。)
贴代码(AC 15MS)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAX = 105;
const double INF = 0x7f7f7f7f;
double p[MAX], dp[MAX];
int main()
{
double l, vt_ele, vt_foot, vr_foot, dis_ele, ele_t, len, time;
int n;
while(~scanf("%lf", &l))
{
scanf("%d%lf%lf", &n, &dis_ele, &ele_t);
scanf("%lf%lf%lf", &vr_foot, &vt_ele, &vt_foot);
for(int i = 1; i <= n; i++)
scanf("%lf", p + i);
p[0] = 0;
p[n + 1] = l;
dp[0] = 0;
for(int i = 1; i <= n + 1; ++i)
{
dp[i] = INF;
for(int j = 0; j < i; ++j)
{
len = p[i] - p[j];
if(len > dis_ele)
time = dis_ele / vt_ele + (len - dis_ele) / vt_foot;
else
time = len / vt_ele;
time += dp[j];
if(j > 0)
time += ele_t;
dp[i] = min(time, dp[i]);
}
}
if(dp[n + 1] > l / vr_foot)
printf("Good job,rabbit!\n");
else
printf("What a pity rabbit!\n");
}
return 0;
}