P4163 [SCOI2007]排列
题面
分析
蒟蒻真的真的不会搞如此高级的状压啊啊啊啊啊啊啊
于是一发爆搜打了50分如果要打爆搜的话,要注意判重的问题
若是
000
的话,它的全排列(不管第一个1和第二个1是一样的)有6种,但实际这些都是重复的
于是我开了一个一亿的vis数组,(没怎么考虑空间开销),幸好没爆
但判重其实可以用一个比较巧妙的数学方法(正解也是这样),一开始统计每一个数出现的次数cnt[i],然后把结果依次除掉即可
其依据是,若某个数出现了i次,则长度为i,值全部是某个数的序列的全排列个数为,即原排列中每个数都被重复计算了次,于是直接除掉
(如3010012,cnt[0]=3,cnt[0]!=6,cnt[1]=2,cnt[1]!=2即全排列中3010012出现了cnt[0]cnt[1]次,实际上只该有一次)
(下午再更~~)