您的位置:首页 > 其它

hdu 2059 简单动态规划

2013-03-21 15:52 316 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2059

该题目需要从整体考虑,对于充电站和终点这N+1个点,到达他们的最短时间肯定是从他们前边的某个点冲完电后直接到达的。用t[i]记录到第i个点时的最短距离,则t[i]就是从0——>(i-1)这些点冲满电直接到点i所用时间的最小值。

#include<stdio.h>
int L,N,C,T,Vr,Vt1,Vt2,q[111];
double t[111];

void time()
{
int i,j;
double min,tim;
for(i=1;i<=N+1;i++)
{
if(C>=q[i])
min=1.0*q[i]/Vt1;
else
min=1.0*C/Vt1+1.0*(q[i]-C)/Vt2;
for(j=1;j<i;j++)
{
if(C>=q[i]-q[j])
tim=1.0*(q[i]-q[j])/Vt1+1.0*t[j]+1.0*T;
else
tim=1.0*C/Vt1+1.0*(q[i]-q[j]-C)/Vt2+1.0*t[j]+1.0*T;
if(tim<min)
min=tim;
}
t[i]=min;
}
}

int main()
{
int k;
double Tr,Tt;
while(scanf("%d",&L)!=EOF)
{
scanf("%d%d%d%d%d%d",&N,&C,&T,&Vr,&Vt1,&Vt2);
for(k=1;k<=N;k++)
{
scanf("%d",&q[k]);
}
q[N+1]=L;
time();
Tr=1.0*L/Vr;
Tt=t[N+1];
if(Tr<Tt)
printf("Good job,rabbit!\n");
else
printf("What a pity rabbit!\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: