解题思路:
动态规划的思想,这里优化了一下,没有使用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语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:992 |
C语言训练-素数问题 (C语言代码)浏览:1000 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:744 |
哥德巴赫曾猜测 (C语言代码)浏览:1028 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:515 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:745 |
用筛法求之N内的素数。 (C++代码)浏览:704 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:571 |
剪刀石头布 (C++代码)浏览:1719 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1479 |