http://acm.hdu.edu.cn/showproblem.php?pid=2059
#include<iostream>
using namespace std;
struct Node
  {
double tim;
double ls;
};
int main()
  {
double S;
while(cin>>S)
 {
int n,i,j;
double L,time,rv,tortoiseC,tortoiseQ,pos[103];
Node dp[103],temp;
double d,d1,d2,t1,t2;
cin>>n>>L>>time;
cin>>rv>>tortoiseQ>>tortoiseC;
for(i=1;i<=n;i++)
cin>>pos[i];
if(tortoiseQ<=tortoiseC)//骑车不如蹬车
 {
if(S/tortoiseC>S/rv)
cout<<"Good job,rabbit!"<<endl;
else
cout<<"What a pity rabbit!"<<endl;
continue;
}
dp[0].tim=0;
dp[0].ls=L;
pos[0]=0;//一定要赋初值,否则其默认初值为负数,因为是double类型
pos[n+1]=S;
for(i=1;i<=n+1;i++)
 {
dp[i].tim=100000000;
dp[i].ls=0;
for(j=0;j<i;j++)//从出发点开始到i站之前选择一个最优的
 {
d=pos[i]-pos[j];
if(dp[j].ls>=d)//无需充电
 {
temp.tim=dp[j].tim+d/tortoiseQ;
temp.ls=dp[j].ls-d;
}
else
 {
t1=dp[j].tim+dp[j].ls/tortoiseQ+(d-dp[j].ls)/tortoiseC;
d1=0;
if(L>=d)//充电够用情况
 {
t2=dp[j].tim+time+d/tortoiseQ;
d2=L-d;
}
else//充电不够用情况
 {
t2=dp[j].tim+time+L/tortoiseQ+(d-L)/tortoiseC;
d2=0;
}

if(t1<t2)//选择时间最少的
 {
temp.tim=t1;
temp.ls=d1;
}
else
 {
temp.tim=t2;
temp.ls=d2;
}
}
if(temp.tim < dp[i].tim)
 {
dp[i].tim=temp.tim;
dp[i].ls=temp.ls;
}
}//for(j=0;j<i;j++)
}//for(i=1;i<=n+1;i++)
if(dp[n+1].tim>S/rv)
cout<<"Good job,rabbit!"<<endl;
else
cout<<"What a pity rabbit!"<<endl;
}
return 0;
}
|