NKOJ4810 Bill的挑战 [状态压缩]
如果只设定一个状态f[i]表示刚好有i个字符串匹配的字符串个数,会发现这样的状态是推不走的。所以设定状态f[i][s]表示前i个字符都匹配的字符串集合为s的方案数。
预处理数组g[i][j]表示N个字符串中第i位字母为j(0-‘a’, 1-‘b’…)的集合。
可以得到:f[i+1][s&g[i+1][j]]=sigma{ f[i][s] }
答案是f[Len][s](s中有k个1)。
如果只设定一个状态f[i]表示刚好有i个字符串匹配的字符串个数,会发现这样的状态是推不走的。所以设定状态f[i][s]表示前i个字符都匹配的字符串集合为s的方案数。
预处理数组g[i][j]表示N个字符串中第i位字母为j(0-‘a’, 1-‘b’…)的集合。
可以得到:f[i+1][s&g[i+1][j]]=sigma{ f[i][s] }
答案是f[Len][s](s中有k个1)。