atcoder#AGC062B. [AGC062B] Split and Insert

[AGC062B] Split and Insert

配点 : 700700

問題文

11 から NN までの整数からなる順列 A=(A1,A2,,AN)A=(A_1,A_2,\dots,A_N) があります。はじめ Ai=i (1iN)A_i=i\ (1\leq i \leq N) です。

高橋君はこの順列に対し以下のような操作を KK 回行います。

  • 0k<N0 \leq k < N を満たす整数 kk を選ぶ。AA の後ろ kk 項を前 NkN-k 項に挿入する。より正確には、AA を以下の条件を満たす長さ NN の好きな順列 AA' で置き換える。- (A1,A2,,ANk)(A_1,A_2,\dots,A_{N-k})AA' の(連続とは限らない)部分列である。
    • (ANk+1,ANk+2,,AN)(A_{N-k+1},A_{N-k+2},\dots,A_{N})AA' の(連続とは限らない)部分列である。
  • (A1,A2,,ANk)(A_1,A_2,\dots,A_{N-k})AA' の(連続とは限らない)部分列である。
  • (ANk+1,ANk+2,,AN)(A_{N-k+1},A_{N-k+2},\dots,A_{N})AA' の(連続とは限らない)部分列である。

ii 回目の操作で選んだ kkkik_i としたとき、一連の操作にかかるコストは i=1KkiCi\sum_{i=1}^{K}k_iC_i です。

高橋君は KK 回の操作の後、A=(P1,P2,,PN)A=(P_1,P_2,\dots,P_N) が成り立つように操作を行いたいです。

そのように一連の操作を行うことが可能か判定してください。可能な場合、そのような一連の操作にかかるコストの最小値を求めてください。

制約

  • 2N1002 \leq N \leq 100
  • 1K1001 \leq K \leq 100
  • 1Ci1091 \leq C_i \leq 10^9
  • (P1,P2,,PN)(P_1,P_2,\dots,P_N)11 から NN までの整数からなる順列
  • 入力される値はすべて整数

入力

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

NN KK

C1C_1 C2C_2 \dots CKC_K

P1P_1 P2P_2 \dots PNP_N

出力

KK 回の操作の後、A=(P1,P2,,PN)A=(P_1,P_2,\dots,P_N) が成り立つように操作を行うことが不可能な場合、 -1 を出力してください。可能な場合、そのような一連の操作のコストの最小値を出力してください。

4 1
3
3 1 2 4
6

操作で k=2k=2 とし、A3=3A_3=3A1,A2A_1,A_2 より前に、 A4=4A_4=4A1,A2A_1,A_2 の後に挿入することで A=(3,1,2,4)A=(3,1,2,4) とすることができ、 A=(P1,P2,P3,P4)A=(P_1,P_2,P_3,P_4) が成り立ちます。この操作のコストは 2×C1=62 \times C_1 = 6 です。

操作後、 A=(P1,P2,P3,P4)A=(P_1,P_2,P_3,P_4) が成り立つように操作するとき、コストの最小値は 66 であることが証明できます。

4 1
3
4 3 2 1
-1

操作後、A=(P1,P2,P3,P4)A=(P_1,P_2,P_3,P_4) が成り立つように操作することはできません。

20 10
874735445 684260477 689935252 116941558 915603029 923404262 843759669 656978932 286318130 255195090
11 15 20 10 6 8 18 2 12 4 9 13 19 3 16 7 14 17 5 1
7372920743