#P1971. 「ROI 2016 Day2」二指禅

「ROI 2016 Day2」二指禅

题目描述

译自 ROI 2016 Day2 T4. Тренажёр «102-пальцевый набор»

未来的机器人码农一定学过二指禅。为了帮助码农们精通二指禅,某打字软件推出了一种新的练习方法。

屏幕的上半部分会显示一个 mm 位 01 串 SS(01 串:只包含数字 0 和 1 的字符串)。下半部分会显示 nn 个 01 串(称之为模式串),编号分别为 1…n1\ldots n。第 ii 个模式串为 cic_i。每个模式串有一个费用 wiw_i。模式串的总长度为 LL。

你需要将 SS 分成若干个子串,使得对于 SS 的每个子串 SiS_i,存在一个 jj 满足:SiS_i 是 cjc_j 的前缀或后缀。

划分的总花费就是每个子串对应的模型的模式串之和。试求最小总花费。如果没有合法划分方案,则输出 -1。

输入格式

m,n,Lm,n,L
SS
ci,wic_i,w_i

样例 1

9 2 8
000110100
1 100
1 11001
4
9 3 10
010110101
3 0101
10 011
2 100
8
3 1 3
100
1 101
-1

数据范围与提示

对于所有数据,1⩽m,n,L⩽300 0001 ⩽ m, n, L ⩽ 300\,000;1⩽ci⩽1091 ⩽ c_i ⩽ 10^9。

设 lmaxl_{max} 表示单个模式串的最大长度。

子任务 # 分值 mm nn LL cic_i lmaxl_{max} 依赖子任务
1 20 m≤50m \le 50 n≤50n \le 50 L≤500L \le 500 ci≤1000c_i \le 1000 lmax≤50l_{max} \le 50
2 10 m≤5000m \le 5000 --- L≤5000L \le 5000 --- lmax≤1000l_{max} \le 1000 1
3 8 m≤10 000m \le 10\,000 L≤50 000L \le 50\,000 1, 2
4  8  m≤50 000m \le 50\,000 lmax≤2000l_{max} \le 2000 1--3
5 10 n≤20n \le 20 ---
6 5 n≤200n \le 200 5
7 9 --- ci=1c_i=1
8 5 ci≤10c_i\le 10 7
9  5  ci≤100c_i\le 100 7, 8
10 5 --- 1--9
11  5  m≤100 000m \le 100\,000 L≤100 000L \le 100\,000 1--10
12 5 m≤200 000m \le 200\,000 L≤200 000L \le 200\,000 1--11
13  5  m≤300 000m \le 300\,000 L≤300 000L \le 300\,000 1--12