题目链接

AtCoder:https://agc002.contest.atcoder.jp/tasks/agc002_f

洛谷:https://www.luogu.org/problemnew/show/AT2000

Solution

对于一个任意的颜色序列,它合法当且仅当任意一个前缀序列都要满足白色数量大于等于颜色种类数(不包括白色)。

设\(f[i][j]\)表示当前填了\(i\)个白球,\(j\)种其他颜色的球的方案数,显然当\(i<j\)时\(f[i][j]=0\)。

考虑转移,我们考虑每次都填最前面那个没填过的位置:

  • 填白球不会有任何影响,直接转移就好了。
  • 否则我们可以从剩下\(n-(j-1)\)种颜色种任选一种,一个填在第一个能填的位置,剩下的\(k-2\)个填在剩下\(n*k-i-(j-1)(k-1)-1\)个位置里。

转移式子就是:

\[f[i][j]=f[i-1][j]+f[i][j-1]\cdot (n-j+1)\cdot \binom{nk-i-(j-1)(k-1)-1}{k-2}
\]

暴力转移就好了,初值\(f[0][0]=1\),时间复杂度\(O(n^2)\)。

#include<bits/stdc++.h>
using namespace std; void read(int &x) {
x=0;int f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
} void print(int x) {
if(x<0) putchar('-'),x=-x;
if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');} #define lf double
#define ll long long const int maxn = 2e3+10;
const int maxm = maxn*maxn;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 1e9+7; int add(int x,int y) {return x+y>mod?x+y-mod:x+y;}
int del(int x,int y) {return x-y<0?x-y+mod:x-y;}
int mul(int x,int y) {return 1ll*x*y-1ll*x*y/mod*mod;} int n,k,f[maxn][maxn],fac[maxm],ifac[maxm],inv[maxm]; void prepare() {
inv[0]=inv[1]=fac[0]=ifac[0]=f[0][0]=1;
for(int i=2;i<maxm;i++) inv[i]=mul(mod-mod/i,inv[mod%i]);
for(int i=1;i<maxm;i++) fac[i]=mul(fac[i-1],i);
for(int i=1;i<maxm;i++) ifac[i]=mul(ifac[i-1],inv[i]);
} int c(int nn,int mm) {return mul(fac[nn],mul(ifac[mm],ifac[nn-mm]));} int main() {
read(n),read(k);prepare();if(k==1) puts("1"),exit(0);
for(int i=1;i<=n;i++)
for(int j=0;j<=i;j++)
f[i][j]=add(f[i-1][j],mul(f[i][j-1],mul(n-j+1,c(n*k-i-(k-1)*(j-1)-1,k-2))));
write(f[n][n]);
return 0;
}

[AT2000] [agc002_f] Leftmost Ball的更多相关文章

  1. 【AGC 002F】Leftmost Ball

    Description Snuke loves colorful balls. He has a total of N*K balls, K in each of his favorite N col ...

  2. 【agc002f】Leftmost Ball(动态规划)

    [agc002f]Leftmost Ball(动态规划) 题面 atcoder 洛谷 题解 我们从前往后依次把每个颜色按顺序来放,那么如果当前放的是某种颜色的第一个球,那么放的就会变成\(0\)号颜色 ...

  3. 【AtCoder】AGC022 F - Leftmost Ball 计数DP

    [题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...

  4. ATcoder 2000 Leftmost Ball

    Problem Statement Snuke loves colorful balls. He has a total of N×K balls, K in each of his favorite ...

  5. AT2000 Leftmost Ball

    设\(f[i][j]\)表示当前有\(i\)个白球,一共放完了\(j\)种球 显然有\(j <= i\) 对于每个状态目前已经放下去的球是固定了的,那么考虑转移 放白球 从\(f[i - 1][ ...

  6. AT2000 Leftmost Ball(计数dp+组合数学)

    传送门 解题思路 设\(f[i][j]\)表示填了\(i\)个白色,\(j\)种彩色的方案数,那么显然\(j<=i\).考虑这个的转移,首先可以填一个白色,就是\(f[i][j]=f[i-1][ ...

  7. AT2000 Leftmost Ball 解题报告

    题面 给你n种颜色的球,每个球有k个,把这n*k个球排成一排,把每一种颜色的最左边出现的球涂成白色(初始球不包含白色),求有多少种不同的颜色序列,答案对1e9+7取模 解法 设\(f(i,\;j)\) ...

  8. AtCoder Grand Contest 002 F:Leftmost Ball

    题目传送门:https://agc002.contest.atcoder.jp/tasks/agc002_f 题目翻译 你有\(n*k\)个球,这些球一共有\(n\)种颜色,每种颜色有\(k\)个,然 ...

  9. AtCoder AGC002F Leftmost Ball (DP、组合计数)

    题目链接: https://atcoder.jp/contests/agc002/tasks/agc002_f 题解: 讲一下官方题解的做法: 就是求那个图(官方题解里的)的拓扑序个数,设\(dp[i ...

随机推荐

  1. Zabbix学习之路(八)之自动化监控网络发现和主动注册

    1.网络发现  分两步走:创建发现规则(rule)和执行的动作(Action)(1)创建发现规则"Configuration"-->"Create discover ...

  2. MySQL入门篇(五)之高可用架构MHA

    一.MHA原理 1.简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Faceb ...

  3. Nginx入门篇(四)之常用配置解析

    1.Nginx状态信息功能 Nginx的模块当中有一个ngx_http_stub_status_module模块,这个模块主要记录Nginx的基本访问信息,要使用该模块,需要在编译的时候增加http_ ...

  4. [Cocos2d-html5]关于压缩

    使用的是2.2版本,压缩时要注意文件顺序,main.js文件最好排在最后一个,避免错误.

  5. Qt 利用XML文档,写一个程序集合 三

    接上一篇https://www.cnblogs.com/DreamDog/p/9214052.html 滚动区域实现, 滚动区域可以三成分层 第一层,显示内容 中间层,滚动层 第三层,爸爸层 把我们要 ...

  6. CsvHelper文档-6类型转换

    CsvHelper文档-6类型转换 CsvHelper使用类型转换器来转换string到对象,或者对象到string: ITypeConverter 类型转换器的结构,必须实现: public int ...

  7. 网络安全攻防----html基础

    一.学习html的硬件条件 网页(.Html)是静态的,学习html语言需要选择Chrome浏览器和Sublime3编辑器,选择Chrome浏览器是因为Chrome浏览器兼容性比较好,支持各种各样的插 ...

  8. [C++] Solve "No source available for main()" error when debugging on Eclipse

    In Mac, the issue image: 1. A existing cmake project on disk 2. import this project into Eclipse. 3 ...

  9. USACO 1.3.4 Prime Cryptarithm 牛式(模拟枚举)

    Description 下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式. * * * x * * ------- * * * * * * ------ ...

  10. Lucky Conversion(找规律)

    Description Petya loves lucky numbers very much. Everybody knows that lucky numbers are positive int ...