CF1917C Watering an Array

题目描述

你有一个长度为 $n$ 的整数数组 $a_1, a_2, \ldots, a_n$。在接下来的 $d$ 天里,你每天必须执行以下两种操作之一: - 对数组 $a$ 的前 $b_i$ 个元素各加 $1$(即对每个 $1 \le j \le b_i$,令 $a_j := a_j + 1$)。 - 统计数组中等于其下标的元素个数(即 $a_j = j$),记为 $c$。然后将 $c$ 加入你的得分,并将整个数组 $a$ 重置为长度为 $n$ 的全 $0$ 数组(即 $[a_1, a_2, \ldots, a_n] := [0, 0, \ldots, 0]$)。 你的初始得分为 $0$。注意,每天必须且只能执行上述两种操作之一,不能跳过,也不能同时执行两种操作。 请问在第 $d$ 天结束时,你最多能获得多少分? 由于 $d$ 可能很大,序列 $b$ 以压缩格式给出: - 给定一个长度为 $k$ 的整数序列 $v_1, v_2, \ldots, v_k$。序列 $b$ 是无限多个 $v$ 的拼接:$b = [v_1, v_2, \ldots, v_k, v_1, v_2, \ldots, v_k, \ldots]$。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^3$),表示测试用例的数量。 每个测试用例的第一行包含三个整数 $n$、$k$ 和 $d$($1 \le n \le 2000$,$1 \le k \le 10^5$,$k \le d \le 10^9$),分别表示数组 $a$ 的长度、序列 $v$ 的长度和操作天数。 每个测试用例的第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \le a_i \le n$),表示数组 $a$。 每个测试用例的第三行包含 $k$ 个整数 $v_1, v_2, \ldots, v_k$($1 \le v_i \le n$),表示序列 $v$。 保证所有测试用例中 $n$ 的总和不超过 $2000$,$k$ 的总和不超过 $10^5$。

输出格式

对于每个测试用例,输出一个整数,表示在第 $d$ 天结束时你能获得的最大得分。

说明/提示

在第一个测试用例中,序列 $b$ 为 $[1, 3, 2, 3, 1, 3, 2, 3, \ldots]$,一种最优方案如下: - 第 $1$ 天执行第二种操作:得分增加 $3$,数组 $a$ 变为 $[0, 0, 0]$。 - 第 $2$ 天执行第一种操作:数组 $a$ 变为 $[1, 1, 1]$。 - 第 $3$ 天执行第一种操作:数组 $a$ 变为 $[2, 2, 1]$。 - 第 $4$ 天执行第二种操作:得分增加 $1$,数组 $a$ 变为 $[0, 0, 0]$。 可以证明无法获得超过 $4$ 的分数,因此答案为 $4$。 在第二个测试用例中,序列 $b$ 为 $[6, 6, 6, 6, \ldots]$。一种获得 $3$ 分的方式是:第 $1$ 天和第 $3$ 天执行第一种操作,第 $2$ 天执行第二种操作。 由 ChatGPT 4.1 翻译