URL
https://onlinejudge.u-aizu.ac.jp/problems/1406
题意
有一个大小为 \(n\) 的字符集。现在用一些互不相同的 \(01\) 串给这些字符编码,第 \(i\) 个字符对应的 \(01\) 串为 \(s_i\)。一个字符串的编码定义为每个字符的 \(01\) 编码顺次连接而成的到的 \(01\) 串。
求一个最短的 \(01\) 串,使得存在两个不同的字符串的编码都为这个串,输出这个串长度。如果不存在的话输出 \(0\)。
\(n \le 1000, 1 \le |s_i| \le 16\)
解法一
考虑一个生成两个不同字符串的算法,记 \(dp_{i,d}\) 为编码较长的那个字符串的最后一个字符为 \(i\),两个串的编码长度差为 \(d\) 时较长的那个编码的最小长度,转移时可以保证 \(d \le 16\),可以直接跑最短路。
复杂度 \(O((16n^2) \log{16n^2})\)
解法二
直接把两个串对齐后跑 BFS 转移,复杂度不太会证啊。。。