考虑枚举哪些人一定不合法,那么方案数可以通过简单的排列组合算出. 于是设$f[i][j]$表示前$i$种糖果,一共有$j$个人一定不合法的方案数,但是这样并不能保证其他人一定合法,所以需要进行容斥. 最后将答案除以每种糖果数量的阶乘,即可保证本质不同. 时间复杂度$O(n^2)$. #include<cstdio> const int N=2005,P=1000000009; int n,i,j,k,x,a[N],C[N][N],fac[N],inv[N],f[N][N],tmp,ans; i…