一道神奇的题目-龟兔赛跑

发布时间:2016-12-11 16:07:19 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"一道神奇的题目-龟兔赛跑",主要涉及到一道神奇的题目-龟兔赛跑方面的内容,对于一道神奇的题目-龟兔赛跑感兴趣的同学可以参考一下。

神奇的龟兔赛跑题目,整的整死我了。想想自己的思考过程,好像这种摸不到头脑的阶段最优解的题目是要用动态规划的,不过动态规划实在是太动脑筋了,这真不是一天两天能够学好的,慢慢积累知识吧。 贴出代码: #include <stdio.h> #include <string.h> #include <iostream> #include <string> using namespace std; const int MAXN = 100 + 11; int p[MAXN]; double d[MAXN]; double t[MAXN][MAXN]; int len, N, C, T; int vr, vt1, vt2; void init() { for (int i = 0; i < N + 1; i++) { for (int j = i + 1; j <= N + 1; j++) { double length = p[j] - p[i]; if (length <= C) { t[i][j] = length * 1.0 / vt1 + T; } else { t[i][j] = (length - C) * 1.0 / vt2 + C * 1.0 / vt1 + T; } // cout << "i = " << i << " j = " << j << endl; // cout << "t[i][j] = " << t[i][j] << endl; } } } double solve() { d[0] = 0; for (int i = 1; i <= N + 1; i++) { double ans = 10000000000.0; // printf("%lf\n",ans); for (int j = 0; j < i; j++) { ans = min(ans, d[j] + t[j][i]); } d[i] = ans; } // cout << "d[N + 1] = " << d[N + 1] << endl; return d[N + 1] - T; } int main() { while (scanf("%d", &len) != EOF) { scanf("%d%d%d", &N, &C, &T); scanf("%d%d%d", &vr, &vt1, &vt2); for (int i = 1; i <= N; i++) { scanf("%d", &p[i]); } p[0] = 0; p[N + 1] = len; init(); double timer = len * 1.0 / vr * 1.0; double timet = solve(); if (timer <= timet) { printf("Good job,rabbit!\n"); } else { printf("What a pity rabbit!\n"); } } // system("pause"); return 0; }

上一篇:算法
下一篇:书写是为了更好的思考

相关文章

相关评论