AT_agc062_b.[AGC062B] Split and Insert

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

有一个由 11 到 NN 的整数构成的排列 A=(A1,A2,…,AN)A=(A_1,A_2,\dots,A_N)。初始时 Ai=i (1≤i≤N)A_i=i\ (1\leq i \leq N)。

高桥君对这个排列进行如下操作 KK 次:

  • 选择一个满足 0≤k<N0\leq k < N 的整数 kk。将 AA 的最后 kk 项插入到前 N−kN-k 项中。更准确地说,将 AA 替换为任意满足以下条件的长度为 NN 的排列 A′A':
    • (A1,A2,…,AN−k)(A_1,A_2,\dots,A_{N-k}) 是 A′A' 的(不一定连续的)子序列。
    • (AN−k+1,AN−k+2,…,AN)(A_{N-k+1},A_{N-k+2},\dots,A_{N}) 是 A′A' 的(不一定连续的)子序列。

第 ii 次操作选择的 kk 为 kik_i 时,这一系列操作的总代价为 ∑i=1KkiCi\sum_{i=1}^{K}k_iC_i。

高桥君希望经过 KK 次操作后,使 A=(P1,P2,…,PN)A=(P_1,P_2,\dots,P_N) 成立。

请判断是否存在这样的操作序列。如果存在,求出使 A=(P1,P2,…,PN)A=(P_1,P_2,\dots,P_N) 的最小总代价。

输入格式

输入按以下格式从标准输入给出。

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。
如果可以,请输出使 A=(P1,P2,…,PN)A=(P_1,P_2,\dots,P_N) 的最小总代价。

输入输出样例

  • 输入#1

    4 1
    3
    3 1 2 4

    输出#1

    6
  • 输入#2

    4 1
    3
    4 3 2 1

    输出#2

    -1
  • 输入#3

    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

    输出#3

    7372920743

说明/提示

限制条件

  • 2≤N≤1002\leq N\leq 100
  • 1≤K≤1001\leq K\leq 100
  • 1≤Ci≤1091\leq C_i\leq 10^9
  • (P1,P2,…,PN)(P_1,P_2,\dots,P_N) 是 11 到 NN 的一个排列
  • 输入的所有值均为整数

样例解释 1

操作时选择 k=2k=2,将 A3=3A_3=3 插入到 A1,A2A_1,A_2 之前,将 A4=4A_4=4 插入到 A1,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。

样例解释 2

无法通过操作使 A=(P1,P2,P3,P4)A=(P_1,P_2,P_3,P_4) 成立。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页