http://acm.hdu.edu.cn/showproblem.php?pid=2059
一开始想多了
代码基本上抄的 关键是没搞懂为什么不考虑加油为什么也能 AC
仔细一看 原来j=0的时候就已经把每个状态的不加油的情况考虑进去了
代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
using namespace std;
int num[105];
double dp[105];
int main()
{
int l,n,c,t;
int vr,vt1,vt2;
while(scanf("%d",&l)==1)
{
scanf("%d%d%d%d%d%d",&n,&c,&t,&vr,&vt1,&vt2);
for(int i=1;i<=n;i++)
scanf("%d",&num[i]),dp[i]=1000000000.0;
num[0]=0;
num[n+1]=l;
dp[0]=0;
dp[n+1]=1000000000.0;
for(int i=1;i<=n+1;i++)
{
double mins=1000000000.0;
for(int j=0;j<i;j++)
{
int b=num[i]-num[j];
double times;
if(b>c)
times=(double)c/(double)vt1+(double)(b-c)/(double)vt2;
else
times=(double)b/(double)vt1;
if(j)
times+=t;
if(dp[i]>dp[j]+times)
dp[i]=dp[j]+times;
}
}
if(dp[n+1]>(double)l/(double)vr)
printf("Good job,rabbit!\n");
else
printf("What a pity rabbit!\n");
}
}