原题链接:贝茜的训练
解题思路:
动态规划的思想,这里优化了一下,没有使用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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复