atcoder#ARC105C. [ARC105C] Camels and Bridge

[ARC105C] Camels and Bridge

配点 : 500500

問題文

11 から NN の番号がついた NN 頭のラクダがいます。

ラクダ ii の体重は wiw_i です。

あなたはラクダたちに隊列を組ませ、MM 個のパーツからなる橋を渡らせようとしています。

あなたは橋を渡る前にラクダたちの隊列を決め(番号の昇順となる必要はありません)、ラクダどうしを任意の非負の実数の間隔で並ばせることができます。 ラクダたちはこの決められた間隔を保って橋を渡ります。

橋の ii 番目のパーツは長さ lil_i で耐荷重は viv_i です。 パーツ内部(両端を除く)にいるラクダたちの体重の総和が viv_i より大きくなると、橋は崩落してしまいます。

橋が崩落しないようにラクダたちを渡らせることが可能かどうかを判定し、可能ならばそのときの先頭のラクダと末尾のラクダの距離としてありうる値の最小値を求めてください。 これは整数になることが証明できるので、整数で出力してください。

制約

  • 与えられる入力は全て整数
  • 2N82 \leq N \leq 8
  • 1M1051 \leq M \leq 10^5
  • 1wi,li,vi1081 \leq w_i,l_i,v_i \leq 10^8

入力

入力は以下の形式で標準入力から与えられる。

NN MM

w1w_1 w2w_2 \cdots wNw_N

l1l_1 v1v_1

\vdots

lMl_M vMv_M

出力

どのようにしても橋が崩落してしまう場合、-1 を出力せよ。 そうでない場合、橋が崩落しないようにラクダたちを渡らせるときの先頭のラクダと末尾のラクダの距離としてありうる値の最小値を出力せよ。

3 2
1 4 2
10 4
2 6
10
  • 例えば、先頭から順に 1,3,21,3,2 の順番に並べ、ラクダどうしの間隔をそれぞれ 0,100,10 にすることで橋が崩落しないようにラクダたちを渡らせることが可能です。- パーツ 11 ではラクダ 1,31,3 あるいはラクダ 22 のみがパーツの内部にいる状態が起こります。どちらもパーツの内部にいるラクダたちの体重の総和がパーツ 11 の耐荷重である 44 以下のため、橋が崩落することはありません。
    • パーツ 22 ではラクダ 1,31,3 あるいはラクダ 22 のみがパーツの内部にいる状態が起こります。どちらもパーツの内部にいるラクダたちの体重の総和がパーツ 11 の耐荷重である 66 以下のため、橋が崩落することはありません。
  • パーツ 11 ではラクダ 1,31,3 あるいはラクダ 22 のみがパーツの内部にいる状態が起こります。どちらもパーツの内部にいるラクダたちの体重の総和がパーツ 11 の耐荷重である 44 以下のため、橋が崩落することはありません。
  • パーツ 22 ではラクダ 1,31,3 あるいはラクダ 22 のみがパーツの内部にいる状態が起こります。どちらもパーツの内部にいるラクダたちの体重の総和がパーツ 11 の耐荷重である 66 以下のため、橋が崩落することはありません。
  • ラクダどうしの間隔が 00 でもよいこと、パーツの内部はパーツの両端を含まないことに注意してください。
2 1
12 345
1 1
-1
  • どのようにしても橋が崩落してしまう場合は -1 を出力してください。
8 1
1 1 1 1 1 1 1 1
100000000 1
700000000
8 20
57 806 244 349 608 849 513 857
778 993
939 864
152 984
308 975
46 860
123 956
21 950
850 876
441 899
249 949
387 918
34 965
536 900
875 889
264 886
583 919
88 954
845 869
208 963
511 975
3802