解题思路:

动态规划的思想,这里优化了一下,没有使用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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论