hdu 2059

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2059

题意:中文。

mark:题意有点绕。关键是算出乌龟的最短到达时间。

方法就是dp了,每个站到达的最短时间是之前所有站直接转移过来的时间里最少的那个。

1wa,错在double和int的转换上。。。2b了。

代码:

# include <stdio.h>


int p[110] ;
double dp[110] ;
int n, vt1, vt2, c, t, L ;


double min(double a, double b){return a<b?a:b;}


double w(double s, double e)
{
if (e-s < c) return (e-s) /vt1 ;
return c*1.0/vt1 + (e-s-c)/vt2 ;
}


double calc()
{
int i, j ;
dp[0] = -t, p[0] = 0, p[n+1] = L ;
for(i = 1 ; i <= n + 1 ; i++)
{
dp[i] = 1e9 ;
for (j = 0 ; j < i ;j++)
dp[i] = min(dp[i], t + dp[j] + w(p[j], p[i])) ;
}
return dp[n+1] ;
}


int main ()
{
int i, vr ;
double tt ;
while (~scanf ("%d", &L))
{
scanf ("%d%d%d", &n, &c, &t) ;
scanf ("%d%d%d", &vr, &vt1, &vt2) ;
for(i=1;i<=n;i++) scanf ("%d", &p[i]) ;
tt = calc() ;
// printf ("%lf\n", tt) ;
if (L*1.0 < vr*tt) puts ("Good job,rabbit!") ;
else puts ("What a pity rabbit!") ;
}
return 0 ;
}



原文地址:https://www.cnblogs.com/lzsz1212/p/2336359.html