dp 龟兔赛跑
题意:给出n个充电站的位置,每次充满电可以走Cm,问乌龟需要的最短时间。
题解:s=p[i]-p[j],分成两种情况 s>c和s<c
<span style="font-size:18px;">#include<cstdio>
#include<algorithm>
#include<cstring>
#define M 10010010010
using namespace std;
int main(){
int l,n,c,t,vr,vt1,vt2,i,j;
double T1,T2,mint,ans,dp[110];//注意定义成double
int p[110];
int s;
while (scanf ("%d",&l)!=EOF){
scanf ("%d%d%d%d%d%d",&n,&c,&t,&vr,&vt1,&vt2);
for (i=1;i<=n;i++){
scanf ("%d",&p[i]);
}
p[0]=0;p[n+1]=l;dp[0]=0;
for (i=1;i<=n+1;i++){
mint=M;
for (j=0;j<i;j++){
s=p[i]-p[j];
if (s>c)
ans=c*1.0/vt1+(s-c)*1.0/vt2;
else
ans=s*1.0/vt1;
ans+=dp[j];
if (j)//是否充电
ans+=t;
if (mint>ans)
mint=ans;
}
dp[i]=mint;
}
T1=dp[n+1];
T2=l*1.0/vr;
if (T1>T2)
printf ("Good job,rabbit!\n");
else
printf ("What a pity rabbit!\n");
}
return 0;
}</span>