[AGC002F] Leftmost Ball
好题
题面:
给你 \(n\) 种颜色的球,每种颜色的球有 \(k\) 个,把这 \(n*k\) 个球排成一排,把每一种颜色的最左边出现的球涂成白色(初始球不包含白色),求有多少种不同的颜色序列 \(n,k<=2000\)
肯定要想有 \(n*k\) 个格子放数
本来想一种颜色一种颜色放 发现这是 \(O(n)\) 的 不符合数据范围
发现放一种颜色时白色球要放在第一个空位来去重 但是第一个有颜色的球如果不放在第二个空位会算重 如果紧放就会少白球放在一起的方案
两权相较取其轻 用第二种 再加一维 把白球分开算
\(f[i][j]\) 表示放了 \(i\) 个白球 \(j\) 个颜色方案数
然后就切了
Code
f[0][0]=1;
for(Re i=1;i<=n;++i)
for(Re j=0;j<=i;++j){
if(i>j) f[i][j]=f[i-1][j];
(f[i][j]+=f[i][j-1]*(n-(j-1))%mod*C(n*K-i-(j-1)*(K-1)-1,K-2))%=mod;
}
ot(f[n][n]);