浅浅记录一次华为伪笔试「2022-09-14」

超级玛丽过吊桥

题目描述

好不容易来到新的一关,有一个长长的吊桥,吊桥的尽头是下水管道,其中随机的木板存在缺失,一旦踩到就会死亡,死亡后如果还有剩余的生命将在原地复活且不受木板缺失影响,但会消耗一次生命;如果跨过了管道,将跌入悬崖,通关失败。超级玛丽从起点S开始,可以走到下个木板(计+1),也可以跳着跨过一个块(计2)或两个木板(计3),最终必须刚好走到终点

现在给定超级玛丽当前的生命数M,吊桥的长度N,缺失的木板数K,以及随机缺失的木板编号数组L,请帮忙计算一下,超级玛丽有多少种方法可以通过此关

解答要求

时间限制:C/C++ 1000ms,其他语言: 2000ms 内存限制:C/C++ 256MB,其他语言:512MB

输入

超级玛丽当前生命数: M (1<=M<=5, 整数) 吊桥的长度: N (1 <=N<=32,整数) 缺失木板数: K (1<=N<=32,整数) 缺失木板编号数组: L (长度及编号的内容不大于N的编号数组, 1<=Li<=N

输出

输出通过此关的吊桥走法个数,如果不能通过此关,请输出0

样例1

输入:2 2 1 ​ 4 输出:4 解释: 2个生命,2个木板,缺失1个木板 第2个木板有缺失,一共有 4种走法:

样例2

输入:1 3 2 ​ 1 3 输出:1 解释: 1个生命,3个木板,缺失2个木板 第1个和第3个有缺失 只有一种走法: 2, 2,其他都不能通关:

代码

最快传输

题目描述

有一批数据包需要传输,每个数据包大小不一样,传输需要不同的时长,现在有N个传输通道,每个通道的大小也不一样,通道只能传输小于等于自己大小的数据包,不同通道可以同时传输数据包,通道中可以缓存多个数据包,当新任务来时,可以先进入缓存队列等待发送,问最短需要多长时间能够传输完成,通道会确保所有数据包都可以传输

解答要求

时间限制: C/C++ 1500ms,其他语言: 3000ms 内存限制: C/C++ 256MB,其他语言: 512MB

输入

第一行MN, M表示队列长度,N表示传输通道数第二行有N个数,表示每个通道的大小P 第三行有M个数,表示每个数据包的大小Q第四行有M个数,表示每个数据包传输时长S 1 <=M,S, P, Q <= 10000 1 <=N <= 1000

输出

输出传输完所有数据包需要的最短时长

样例1

输入: 5 2 5 3 1 4 5 2 3 1 6 10 3 4 输出:16 解释:数据包3进入通道1,数据包2进入通道1,输数据包5进入通道2,数据句4进入通道2,数据包1讲入通道2:通道1的传输时长是10+6=16,通道2的传输时长是3+2+1=8,这样最短时长就为16

样例2

输入:3 2 6 13 2 11 5 3 25 14 输出:25 解释:数据包2进入通道2数据包3进入通道1数据包1进入通道1:通道1的传输时长是14+3=17,通道2的传输时长是25,这样最短时长就为25

分析

贪心策略一:按照数据包大小递减排序,处于同一区间的数据包按照时间递减排序

贪心策略二:按照数据包传输时间递减排序,时间相同,按照数据包大小递减排序,如果有多个通道结束时间相同,选择更小的通道

坑:大小和时间成正比

代码