好久前看过的一道题目,现在做做,。。。。 因为以为都可以整除的 所以被坑了几次
主要思路就是dp[i]表示到i点的最快时间是多少。。。
#include <algorithm>
#include <cstdio>
using namespace std;
double dp[105], p[105];
const double INF=1<<29;
double min(double x,double y)
{
return x<y?x:y;
}
int main()
{
int i, j, n;
double l, c, t, vr, vt1, vt2, tmp;
while(scanf("%lf",&l)!=EOF)
{
scanf("%d%lf%lf",&n,&c,&t);
scanf("%lf%lf%lf",&vr,&vt1,&vt2);
for(i=1;i<=n;i++)
scanf("%lf",&p[i]);
dp[0]=0;
p[0]=0;
p[n+1]=l;
for(i=1;i<=n+1;i++)
dp[i]=INF;
for(i=1;i<=n+1;i++)
{
for(j=0;j<i;j++)
{
if(j)
{
tmp=min(c,p[i]-p[j]);
dp[i]=min(dp[i],dp[j]+(p[i]-p[j])/vt2);
dp[i]=min(dp[i],dp[j]+(p[i]-p[j]-tmp)/vt2+t+tmp/vt1);
}
else
{
tmp=min(c,p[i]-p[j]);
dp[i]=min(dp[i],dp[j]+(p[i]-p[j]-tmp)/vt2+tmp/vt1);
}
}
}
if(dp[n+1]<l/vr)
puts("What a pity rabbit!");
else puts("Good job,rabbit!");
}
return 0;
}