Time Limit: 3 sec / Memory Limit: 512 MB
配点: 点
層からなるダンジョンがあり,ダンジョン内には 人のプレイヤーがいる.ダンジョンの階層には入口から近い順に第 層から第 層までの番号が付いている.また,プレイヤーには から までの番号が付いている.
ダンジョンのある階層から次の階層へ進むには体力を要する.プレイヤーは,第 層 () から第 層に進む際に体力を 消費する.また,このダンジョンは一方通行であり,可能な階層間の移動は第 層 () から第 層への移動のみである.
第 層から第 層までの各階層には つの回復の泉がある.第 層 () にある回復の泉では,プレイヤーは 枚のコインを消費することで体力を 回復させることができる.回復の泉は,コインがある限り何回でも使用することができる.ただし,プレイヤーの体力には上限があり,回復の泉を使っても,体力がその上限を超えることはない.
プレイヤー () は現在第 層にいる.現在の体力は であり,体力の上限は である.プレイヤー は,体力を 未満にすることなく第 層まで進もうとしている.そのためには何枚のコインが必要であろうか.
ダンジョンの情報と各プレイヤーの情報が与えられたとき,各プレイヤーが体力を 未満にせずに目標の階層まで進むことが可能かを判定し,可能な場合には必要なコインの枚数の最小値を求めるプログラムを作成せよ.
入力
入力は以下の形式で標準入力から与えられる.入力される値はすべて整数である.
出力
標準出力に 行で出力せよ.第 行目 () にはプレイヤー が第 層まで進むために必要なコインの枚数の最小値を出力せよ.ただし,プレイヤー が第 層まで進むことができない場合は を出力せよ.
制約
- .
- .
- ().
- ().
- ().
- ().
小課題
- ( 点) ,.
- ( 点) .
- ( 点) ().
- ( 点) 追加の制約はない.
入力例 1Copy
5 4 3 4 1 1 4 2 5 1 2 1 1 6 3 1 6 4 3 5 1 2 5 9
出力例 1Copy
-1 29 3 22
プレイヤー は,体力の上限が であるため,第 層から第 層へ進むことができない.そのため, 行目の出力は となる.
一方で,プレイヤー は体力の上限が であるため,以下のようにして第 層まで進むことができる.
- 第 層でコインを 枚使って体力を にし,第 層に進む.このとき,体力は となる.
- 第 層でコインを 枚使って体力を にし,第 層に進む.このとき,体力は となる.
- 第 層でコインを 枚使って体力を にし,第 層に進む.このとき,体力は となる.
- 第 層ではコインを使わずに,第 層に進む.このとき,体力は となる.
- 第 層でコインを 枚使って体力を にし,第 層に進む.このとき,体力は となる.
合計 枚のコインを使う. 枚未満のコインで第 層まで進むことはできないので, 行目の出力は となる.
入力例 2Copy
10 10 1 8 9 8 1 5 7 10 6 6 10 10 2 8 10 3 9 8 3 7 2 11 28 5 11 28 7 11 28 1 11 18 3 11 18 8 11 18 4 11 11 6 11 11 10 11 11 9 11 5
出力例 2Copy
208 112 179 248 158 116 234 162 42 -1
この入力例は小課題 の制約を満たしている.
入力例 3Copy
20 20 2 3 2 11 4 6 9 15 17 14 8 17 3 12 20 4 19 8 4 5 19 3 18 2 13 7 5 19 10 1 12 8 1 15 20 1 13 2 18 6 12 15 67 7 15 18 16 17 14 9 21 97 1 19 43 3 18 31 16 20 70 7 20 28 1 16 61 3 5 69 9 10 15 2 13 134 11 19 23 16 20 14 5 21 16 15 20 11 7 11 54 7 16 16 13 17 10 3 15 135
出力例 3Copy
151 591 4 284 339 517 35 581 254 58 -1 178 519 -1 -1 -1 219 -1 -1 214