题解:AT_mujin_pc_2018_f チーム分け
LastKismet · · 题解
Sol
首先是
然后不难发现
但还是简单讲一下
Code
const int N=1005;
int n;
int a[N];
mint f[N][N],fc[N],iv[N];
#define C(n,m) (fc[n]*iv[m]*iv[(n)-(m)])
inline void Main(){
cin>>n;
fc[0]=1;rep(i,1,n)fc[i]=fc[i-1]*i;
iv[n]=1/fc[n];per(i,n,1)iv[i-1]=iv[i]*i;
rep(i,1,n)cin>>a[i];
sort(a+1,a+1+n,[](int a,int b){return a>b;});
f[0][0]=1;
rep(i,1,n)rep(j,0,i){
f[i][j]=f[i-1][j];
rep(k,1,min(a[i],j))f[i][j]+=f[i-1][j-k]*C(i-1-(j-k),k-1);
}
put(f[n][n]);
}