[华为OD]C卷 运输时间 200 动态规划

题目:

M辆车需要在一条不能超车的单行道到达终点,起点到终点的距离为N。速度快的车追上前车 

后,只能以前车的速度继续行驶,求最后一车辆到达目的地花费的时间。

注意:

每辆车固定间隔1小时出发,比如第一辆车0时出发,第二辆车1时出发,依次类推.

输入描述

第一行两个数字:M、N,分别代表车辆数和到终点的距离,以空格分隔寸妾下来M行,每行1 

个数字S代表每辆车的速度

1< M < 20

1 < N < 400

0 < S < 30

输出描述

最后一辆车到达目的地花费的时间

示例1:

输入:

2 11

3

2

输出:

5.5

说明:

2辆车,距离11, 0时出发的车速度快,1时出发的车,达到目的地花费5.5

题解:

由于题目说了,速度快的车追上前车,会在追上前车时候按照前车速度继续行驶,那么这个时候,这个速度快的车就会和前车同时到达终点。

那么就有两种情况,追不上前车,那么对应时间就是s/v

追上前车,那么时间和前车一致。明显可以使用动态规划。dp[i]就是第i+1辆车到达终点的时间。

第一辆车dp[0] = s/v[0];

第i辆车 判断能追上,那么s/v[i] + 1< dp[i-1] ,因为第i辆车与前一辆车行驶时间差距1小时,所以有个-1,也就是前车耗时比后车多一

### 华为OD机试C语言考试内容 华为OD机试中的C语言部分主要考察编程基础、算法设计以及数据结构的应用能力。具体来说,常见的考点包括但不限于: - **基本语法**:掌握变量定义、控制流语句(if/else, switch)、循环结构(for, while),函数声明与调用等基础知识[^1]。 - **指针操作**:理解指针的概念及其应用场合;熟练运用指针完成数组遍历、字符串处理等功能[^2]。 - **内存管理**:熟悉动态分配内存的方法(malloc/free),并能正确释放不再使用的资源以防止泄漏[^3]。 - **文件I/O**:能够编写程序读取外部文件输入或将计算结果保存至指定路径下的文本文件中。 - **常见算法实现**:如排序(快速排序、归并排序)、查找(二分法)等经典算法的编码实践。 #### 示例代码片段展示 下面给出一段简单的C语言代码用于演示如何利用指针对字符数组进行逆序排列: ```c #include <stdio.h> #include <string.h> void reverseString(char* str){ int length = strlen(str); char *start = str; char *end = str + length - 1; while(start < end){ // Swap characters at start and end pointers char temp = *start; *start = *end; *end = temp; ++start; --end; } } int main(){ char myStr[]="hello world"; printf("Original string:%s\n",myStr); reverseString(myStr); printf("Reversed string:%s\n",myStr); return 0; } ``` 此段代码展示了如何使用双指针技巧交换两个位置上的元素从而达到反转整个字符串的效果。 --- ### C语言准备方法建议 为了更好地应对华为OD机试,在日常学习过程中应当注重以下几个方面: - **多做练习题**:通过在线平台(OJ)不断尝试不同类型的问题,尤其是那些涉及复杂逻辑判断或是高效性能优化方面的挑战性题目。 - **深入研究官方文档和技术书籍**:对于不确定的知识点及时查阅权威资料加深印象,比如《The C Programming Language》一书就是非常好的参考资料之一。 - **参与开源项目贡献**:实际参与到真实的软件开发流程当中有助于积累宝贵的实战经验,同时也可借此机会结识更多志同道合的朋友共同进步。 - **定期复习总结错题集**:每次做完一套完整的模拟试题之后都要认真分析错误原因所在,并将其记录下来形成个人专属的学习笔记以便日后回顾查看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值