名字瞎取的
Description
给定 \(n\) 个字符串 \(s\),可以对 \(s_i\) 的字符打乱,将这些字符串加入一个 trie 里面求节点数量最小值。
\(n\le 16, \sum |s_i| \le 10^6\)。
Solution
TGoood 巨佬教的 %%%%%%%%%%%
如何评价每次 SX 认为是状压时往往不是然而鹅每次不是状压认为是状压(悲
由于 \(n\le 16\),考虑状压。
\(f_S\) 代表状态为 \(S\) 最小节点数量。
枚举 \(S\) 子集 \(S'\),\(S\) 里面所有字符串公共部分可以提前算出来,令为 \(g_S\)。
方程显而易见 \(f_S = f_{S'} + f_{S - S'} -g_S\)。
代码没写,有时间填坑。
子集枚举忘了 2333333333,这里扯一嘴罢给自己看的 23333333
枚举 p 的子集 q 是
for(int i = p; i >= 0; i = p ^ (i - 1)) q = i ^ p;
原因。。。有时间填坑(我也不懂啦背一下
标签:le,Trie,题解,状压,字符串,枚举,子集,最小化,节点 From: https://www.cnblogs.com/thirty-two/p/16607913.html