题解:P3881 [JLOI2008] CODES
题目传送门
这道题的正解为搜索加剪枝,简单来说就是暴搜。
我们可以用一个 dfs 函数,这个函数拥有两个参数:字符串
这么抽象的说明肯定不容易看懂,让我们先分析一下样例,很容易就能看懂。
样例输入:
5
0110
00
111
001100
110
先演示最优解是怎么形成的(正常不可能一次找到最优解):
- 先往 dfs 函数里塞两个字符串,分别为
001100和00。 - 在所有的字符串里遍历,发现如果字符串
00加上字符串110变成00110时,仍是001100的前缀。 - 进行下一次搜索:再次遍历,发现
00110加上0110变成001100110后001100仍为其前缀。 - 进行下一次搜索:可以使
001100加上110变成001100110,仍为001100110的前缀。 - 发现两个字符串相等,找到最优解。
如果就这么硬生生地实现那么肯定会超时,那么我们要实现一个剪枝:如果当前字符串长度比最优解要长,那么直接结束本次搜索。
接下来就很好实现了!代码放在下面的记录里了,尽量自己写~
AC 记录(带代码)