题意 中文
简单的多阶段决策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