分享丨自己想了个题,拿给豆包改了一下,看看哪位大神解出来
184
2026.03.28
2026.03.28
发布于 四川

【原创】古堡深梯探险

题目背景

在一座古老而幽深的古堡中,矗立着一座无尽回旋的阶梯。每层的台阶布局完全相同,许多位置早已断裂塌陷,无法立足。一位冒险者从高层出发,仅携带有限的体力与生命值,试图穿越层层阶梯,抵达古堡最底层的出口。

阶梯之中暗藏规则:盲目回跳会极大消耗体力,笔直下落会承受额外损耗,在同一层徘徊过久则会陷入险境。只有合理规划每一次跳跃,才能在资源耗尽前成功抵达终点。

题目描述

冒险者从第 N 层出发,初始体力为 A,生命值为 B。

楼梯每 M 行为一层,所有楼层结构完全相同。每行有 5 个位置,1 代表可站立的台阶,0 代表无法落脚的虚空。

行从上至下编号。

- 从某一层最后一行向下跳跃1行,将到达下一层第一行。

- 从一层第一行向上跳跃1行,将到达上一层最后一行。

初始位置:当前层第一行最左侧的可站立台阶。

目标:到达第 1 层的最后一行的任意可站立台阶。

冒险者可以在任意两个合法台阶之间直接跳跃,无需逐行移动。

消耗规则

1. 向下跳跃

- 基础消耗 1 点体力。

- 若一次向下跳跃跨越 k 行,则额外消耗 k-1 点生命值。

- 一次跳跃跨越 t 层,体力消耗增加 0.5t,结果向上取整。

2. 同行移动

- 若在同一行内跳跃,共跨越 d 列,则额外消耗 d-1 点体力。

- 连续 3 次及以上仅在同行内移动,每次额外消耗 2 点体力。

3. 同列向下跳跃

- 向下跳跃且落点与起点同列,每跨越一层,额外消耗 1 体力与 1 生命值。

- 连续两次同列向下跳跃,第二次额外消耗 3 点生命值。

4. 向上回跳

- 单次最多向上跳跃 3 行。

- 每向上一行消耗 2 点体力。

- 全局最多向上跳跃 7 次。

- 向上跳跃后,接下来两次向下跳跃的消耗翻倍。

5. 环境损耗

- 每下降一层,生命值自动减 1(第 3 层及以下不再衰减)。

- 连续 5 次跳跃后,所在层数均未严格小于跳跃前层数,直接判定探险失败。

终止条件

满足任一条件时,冒险者立即停止跳跃:

- 体力 \le 0 或 生命值 \le 0

- 向上回跳次数用尽

- 触发连续无效探索判定

- 总跳跃次数 \ge 5N

输入格式

第一行四个整数 N,A,B,M。

接下来 M 行,每行 5 个整数 0/1。

输出格式

- 若能到达目标,输出  Yes 。

- 否则输出  No  与最终所在层数,空格隔开。

数据范围

- 10 ≤N ≤10^5

- 1 ≤A,B ≤5*10^3

- 5 ≤ M ≤30

- 不保证每行存在台阶

样例输入

12 50 40 5

0 1 0 0 0

1 0 0 0 0

0 0 0 0 0

0 0 1 0 1

1 0 0 0 1

 

样例输出

Yes

提示

1. 本题本质是带资源限制的最短路问题,建议使用优先队列(Dijkstra)进行状态扩展,保证先访问资源更充足的状态。

2. 由于层数可达 10^5,不能对每一层单独存储状态,应利用楼层结构完全相同的周期性,仅对「当前层内位置 + 剩余体力 + 剩余生命值」做最优剪枝。

3. 需维护每个位置的帕累托最优状态集:若到达同一行、列时,已有状态的体力与生命值均不低于当前状态,则当前状态可直接剪枝,避免指数级爆炸。

评论 (0)