题意 中文
简单的多阶段决策DP 令p[0]=0 p[n]=l d[i]表示乌龟从起点到第i个加油站所需的最小时间 那么有d[i]=min(d[i],d[j]+t(j,i)) t(j,i)表示 在第j个加油站加满油 然后直接开到第i个加油站 当然第0个加油站是起点就不用加油了 这样推到最后d[n]就是乌龟所需的最小时间了
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 105,INF=999999;
double d[N],ti;
int main()
{
int n, c, t, vr, v1, v2, l, p[N];
while (~scanf ("%d", &l))
{
scanf ("%d%d%d%d%d%d", &n, &c, &t, &vr, &v1, &v2);
++n,p[0]=0;
for (int i = 1; i < n; ++i)
scanf ("%d", &p[i]); p[n] = l;
for (int i = 1; i <= n; ++i)
{
d[i]=INF;
for (int j = 0; j < i; ++j)
{
int len = p[i] - p[j];
if (len > c) ti = c * 1.0 / v1 + (len - c) * 1.0 / v2;
else ti = len * 1.0 / v1;
if (j) ti += t;
d[i]=min(d[i],d[j]+ti);
}
}
if (d[n] < l * 1.0 / vr)
printf ("What a pity rabbit!\n");
else printf ("Good job,rabbit!\n");
}
return 0;
}
100 3 20 5 5 8 2 10 40 60 100 3 60 5 5 8 2 10 40 60
Good job,rabbit! What a pity rabbit!
HDU 2059 龟兔赛跑(DP),布布扣,bubuko.com
原文:http://blog.csdn.net/iooden/article/details/38664845