原题链接:贝茜的训练
解题思路:
动态规划的思想,这里优化了一下,没有使用dp数组,降低空间复杂度,用两个int变量表示。
从起点到当前路段并返回的总时间 = 上一段路往返总耗时 + 当前路段往返耗时(dp[i] = dp[i-1] + dp[i])
注意事项:
参考代码:
#include <stdio.h> int getReturn(int u, int f, int d, char ch) { if (ch == 'f') { return f * 2; // 平地 } else { return u + d; // 上下坡 } } int main() { int M, T, U, F, D; scanf("%d %d %d %d %d", &M, &T, &U, &F, &D); int reach = 0; // 最终达到的路段数 int pre = 0, cur; // 前一段路耗时总耗时,当前路段耗时 char road; // 当前路段的情况(上坡、平底、下坡) for (int i = 0; i < T; i++) { getchar(); // 吸收上一行的换行符\n scanf("%c", &road); int t = getReturn(U, F, D, road); // 第i段路往返所需时间 cur = i == 0 ? t : pre + t; // 当前路段总耗时 = 前面路段总耗时 + 当前路段往返耗时 pre = cur; // 对于下一段路来说,更新它的前面路段总耗时 if (cur <= M) { reach++; } } printf("%d", reach); return 0; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复