华为OD机试-乘坐保密电梯-回溯(Java 2024 C卷 200分)
题目描述
有一座保密大楼,你从0楼到达指定楼层m,必须按照给定的规则乘坐电梯。给定一个数字序列,每次根据序列中的数字n,上升n层或者下降n层,前后两次的方向必须相反,规定首次的方向向上。需要自行组织序列的顺序按规定操作到达指定楼层。求解到达楼层的序列组合,如果不能到达楼层,给出小于该楼层的最近序列组合。
说明:
- 操作楼层不限定楼层范围,楼层可以为负数。
- 必须对序列中的每个项进行操作,不能只使用一部分。
- 无论是上楼还是下楼,优先使用序列中尚未使用过的最大数字。
输入描述
- 第一行:期望的楼层,取值范围 [1,50];序列总个数,取值范围 [1,23]。
- 第二行:序列,每个值的取值范围 [1,50]。
输出描述
能够到达楼层或者小于该楼层最近的序列。
解题思路
我们需要找到一个序列的组合,使得按照规则操作后能够到达或尽可能接近目标楼层。具体步骤如下:
- 排序序列:为了优先使用最大的数字,我们首先将序列从大到小排序