已结束 GESP巅峰赛#27

A5731 | Alice 的分段游戏

时间限制1s
内存限制128MB
通过 / 提交0/0

题目描述

给定长度为 $n$ 的整数数组 $a_1,a_2,\dots,a_n$,以及每个位置的颜色 $col_1,col_2,\dots,col_n$(颜色编号为 $1\sim m$)。还给定一个目标颜色集合 $S\subseteq\{1,2,\dots,m\}$ 与一个整数 $k$。

请将数组划分为不超过 $k$ 段的非空连续子段,使得每一段都满足:
1. 段内至少包含一个位置,其颜色属于 $S$;
2. 该段元素和不超过某个阈值 $X$。

在所有可行划分中,最小化阈值 $X$。记答案为
$$ f=\min\left\{\,X \,\middle|\, \text{存在将数组划分为}\ \le k\ \text{段的方案,且每段含目标颜色、段和}\le X\right\}. $$
若无论怎样划分都无法满足“每段必须包含目标颜色”的要求(例如整个数组中没有任何颜色属于 $S$),输出 $-1$。

输入格式

- 第一行:四个整数 $n,m,k,t$ —— 数组长度、颜色总数、允许的最大段数、目标颜色个数。
- 第二行:$n$ 个整数 $a_1,a_2,\dots,a_n$。
- 第三行:$n$ 个整数 $col_1,col_2,\dots,col_n$。
- 第四行:$t$ 个整数,表示目标颜色集合 $S$ 中的颜色编号(可重复,重复无效)。

输出格式

输出一个整数:$f$ 的值;若不存在可行划分,输出 $-1$。

输入输出样例

输入 #1
5 2 2 1
2 3 4 2 1
1 1 2 2 1
1
输出 #1
7
输入 #2
5 2 1 1
1 4 1 1 1
1 1 2 2 2
1
输出 #2
8
C++ 编辑器
输入
输出