Loading

[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]);
posted @ 2022-11-16 21:45  hzoi_Sakura  阅读(46)  评论(5编辑  收藏  举报