P4463 [国家集训队] calc
我们令f(i)为长度为i的答案
然后我们用序列中相同元素的个数来容斥:
f(i)=s(1)f(n-1)-C(n-1,1)*s(2)*f(n-2)+C(n-1,2)*s(3)*f(n-3)-.........
其中s(m)表示sigma(1,A):im
为什么可以这样写:
C(n-m,2)s(m)其实可以表示随意选m个位置,然后随意选择数对答案的贡献。
我们先算序列中全部互相不同的个数,如果我们用s(1)f(n-1)计算,则多算了序列中有i+1个相同的方案。
容斥掉就是这个式子了。
因为N<=500,所以预处理s(i),C之后暴力计算就好了