#P15436. [蓝桥杯 2025 国 Python B] 魔法护盾

    ID: 15371 远端评测题 2000ms 512MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>动态规划 DP2025背包 DP蓝桥杯国赛

[蓝桥杯 2025 国 Python B] 魔法护盾

说明

在一个魔法世界里,勇士需要穿越一个危险的迷宫。迷宫中有 nn 个房间排成一排,从左至右编号为 11nn,勇士需要按照从左至右的顺序从第 11 个房间开始一直到走出第 nn 个房间才可以穿越成功,每个房间都存在魔法护盾和魔法攻击。

魔法护盾可以累积,但有最大容量限制。第 ii 个房间有 sis_i 个魔法护盾(可能为负,表示护盾被消耗),护盾最大累积容量为 cc

同时,每个房间可能有魔法攻击,aia_i 表示第 ii 个房间的攻击力。如果勇士在房间中累积的护盾小于攻击力,则会导致勇士穿越失败。

关键规则:

  • 初始时,勇士拥有 bb 个护盾。
  • 进入房间 ii 时,先获得 sis_i 护盾(si<0s_i < 0 表示失去 si|s_i| 护盾),然后面临 aia_i 攻击。
  • 护盾有上限,累积护盾不能超过 cc,若获得护盾后护盾大于 cc,则护盾立即变为 cc
  • 如果在任何房间中,护盾数量小于攻击力,冒险失败。
  • 可以选择性地从某些房间中获得“护盾增幅”效果,选择增幅的房间,sis_i 的效果会翻倍,该效果不影响 aia_i

请计算勇士要成功通过所有房间,最少需要对多少个房间使用护盾增幅?如果无论如何都无法通过迷宫,则输出整数 1-1

输入格式

输入的第一行包含三个整数 n,c,bn, c, b,相邻整数之间使用一个空格分隔,分别表示房间数量、护盾最大容量和初始护盾。

第二行包含 nn 个整数 s1,s2,,sns_1, s_2, \dots, s_n,相邻整数之间使用一个空格分隔,sis_i 表示第 ii 个房间的护盾变化。

第三行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,相邻整数之间使用一个空格分隔,aia_i 表示第 ii 个房间的攻击力。

输出格式

输出一行包含一个整数表示答案,即成功通过迷宫所需的最少护盾增幅房间数量。如果无法通过迷宫,请输出整数 1-1

5 9 2
6 -3 6 -1 -4
9 6 6 7 4
1
9 9 0
5 3 9 5 -3 7 -1 3 -5
3 4 3 4 2 8 5 1 3
0

提示

样例说明 1

对第一个房间使用护盾增幅。

到达第 11 个房间,当前护盾值为 min(2+6×2,9)=99\min(2 + 6 \times 2, 9) = 9 \ge 9,可以通过第 11 个房间。

到达第 22 个房间,当前护盾值为 93=669 - 3 = 6 \ge 6,可以通过第 22 个房间。

到达第 33 个房间,当前护盾值为 min(6+6,9)=96\min(6 + 6, 9) = 9 \ge 6,可以通过第 33 个房间。

到达第 44 个房间,当前护盾值为 91=879 - 1 = 8 \ge 7,可以通过第 44 个房间。

到达第 55 个房间,当前护盾值为 84=448 - 4 = 4 \ge 4,可以通过第 55 个房间。所以答案为 11

样例说明 2

不需要使用护盾增幅,就可以通过所有房间。

评测用例规模与约定

对于 25%25\% 的评测用例,1n101 \le n \le 10

对于 50%50\% 的评测用例,1n201 \le n \le 20

对于 60%60\% 的评测用例,1n501 \le n \le 50

对于 70%70\% 的评测用例,1n1001 \le n \le 100

对于 80%80\% 的评测用例,1n10001 \le n \le 1000

对于所有评测用例,1n100001 \le n \le 1000010000si10000-10000 \le s_i \le 100001ai100001 \le a_i \le 100001c500001 \le c \le 500000b500000 \le b \le 50000