先把题意转成更容易处理的形式。
一次压缩把一段长度为 k (k≥2) 的同字符连续子串压成 1 个新符号,所以:
给定一个只包含 0 和 1 的字符串 s,长度为 n。你可以进行若干次“分段压缩”操作,每次操作规则如下:
压缩与不压缩的段拼接后得到新的字符串,其长度等于“未压缩的原字符数量 + 压缩段的个数”。给定目标上限 m,要求将字符串长度压到恰好为 m 的同时,使总代价最小。若无法压到长度 m,输出 −1。
每个测试文件均包含多组测试数据。第一行输入整数 T(1≤T≤102)。 对每组数据:
对每组数据输出一个整数,表示将字符串长度压到 m 所需的最小代价;若无解,输出 −1。
输入
3
5 3
00111
3 5 7 9 11
4 2
0101
1 1 1 1
6 2
111000
10 2 5 10 20 50
输出
7
-1
10
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.