题目传送门

Description

\(n\)种颜色的球,每种\(k\)个,\((n,k\leq 2000)\)将\(n\cdot k\)个球排成一排,把每种颜色最左边的那个涂成白色(初始不含白色),求不同序列个数。

Solution

考虑一种性质,该序列的前缀中白球个数应大于其他颜色的种类。

考虑\(O(n^2)\)的做法,设\(f_{i,j}\)为已经放了\(i\)个白球,放完了\(j\)中其它颜色的方案数。

第\(i\)位若为白球,\(f_{i,j}+=f_{i-1,j}\),即放直接放一个白球

第\(i​\)为若为其它颜色的球,\(f_{i,j}+=f_{i,j-1}\cdot (n-j+1)\cdot C_{n\cdot k-i-(j-1)\cdot (k-1)-1}^{k-2}​\),即在第一个空位选一个颜色放,然后在后面剩下的位置放该颜色剩下\(k-2​\)个球。

综上所述:

\[f_{i,j}=f_{i-1,j}+f_{i,j-1}\cdot (n-j+1)\cdot C_{n\cdot k-i-(j-1)\cdot (k-1)-1}^{k-2}
\]

\[f_{i,0}=1,Ans=f_{n,n}
\]

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2005, P=1000000007;
int f[N][N], fac[N*N], ifac[N*N]; int C(int n, int m){return fac[n]*ifac[m]%P*ifac[n-m]%P;}
int Pow(int x, int t)
{
int res=1;
while (t) {if (t&1) res=res*x%P; x=x*x%P; t>>=1;}
return res;
} signed main()
{
int n, k; scanf("%d%d", &n, &k);
if (k==1) {puts("1"); return 0;}
f[0][0]=fac[0]=1;
for (int i=1; i<=4e6; i++) fac[i]=fac[i-1]*i%P;
ifac[(int)4e6]=Pow(fac[(int)4e6], P-2);
for (int i=4e6-1; ~i; i--) ifac[i]=ifac[i+1]*(i+1)%P;
for (int i=1; i<=n; i++)
for (int j=0; j<=i; j++)
f[i][j]=f[i-1][j]+(j!=0)*
(f[i][j-1]*(n-j+1)%P*C(n*k-i-(j-1)*(k-1)-1, k-2)%P)%P;
printf("%d\n", f[n][n]);
return 0;
}

AGC002F Leftmost Ball的更多相关文章

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

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

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

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

  3. 【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 ...

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

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

  5. ATcoder 2000 Leftmost Ball

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

  6. 【AGC002F】Leftmost Ball DP 数学

    题目大意 有\(n\)种颜色的球,每种\(m\)个.现在zjt把这\(nm\)个球排成一排,然后把每种颜色的最左边的球染成第\(n+1\)种颜色.求最终的颜色序列有多少种,对\(1000000007\ ...

  7. 【agc002f】Leftmost Ball

    题目大意 有n种颜色,每种k个球.将这些球任意排列,将每种颜色中最前面的一个求涂成白色(就是n+1种颜色),求最终的排列的方案的个数. 解题思路 考虑如何计算不会算重, 按颜色顺序,每次往排列插入k个 ...

  8. AtCoder Grand Contest 002 (AGC002) F - Leftmost Ball 动态规划 排列组合

    原文链接https://www.cnblogs.com/zhouzhendong/p/AGC002F.html 题目传送门 - AGC002F 题意 给定 $n,k$ ,表示有 $n\times k$ ...

  9. AGC002 F - Leftmost Ball

    貌似哪里讲过这题..总之当时掉线了(理解能力又差水平又低选手的日常).. 看看题目,应该是DP. 尝试了几次换状态,毫无思路.那我们就来继续挖掘性质吧...为了更直观,我们令第i个出现的球颜色就是i( ...

随机推荐

  1. Spring框架整合JUnit单元测试

    1. 为了简化了JUnit的测试,使用Spring框架也可以整合测试 2. 具体步骤 * 要求:必须先有JUnit的环境(即已经导入了JUnit4的开发环境)!! * 步骤一:在程序中引入:sprin ...

  2. 基于TCP的套接字

    tcp服务端 1 ss = socket() #创建服务器套接字 2 ss.bind() #把地址绑定到套接字 3 ss.listen() #监听链接 4 inf_loop: #服务器无限循环 5 c ...

  3. Rakefile实例教程

    一.简介 简单的说Rakefile就是使用Ruby语法的makefile, 对应make的工具就是rake. 在Ruby on Rails里面, 不管是数据库的初始化, 内容初始化, 删除, 还是测试 ...

  4. 1. Install Git and GitExtension

    Install Git Step 1:   Run

  5. 并发编程(三)Promise, Future 和 Callback

    并发编程(三)Promise, Future 和 Callback 异步操作的有两个经典接口:Future 和 Promise,其中的 Future 表示一个可能还没有实际完成的异步任务的结果,针对这 ...

  6. adb占用

    输入netstat -ano | findstr "5037" .然后会弹出提示告诉你哪些进程占用了该端口,记住非0地址的后面的数字 打开任务管理器,点击“进程“,“查看”-“选择 ...

  7. asp.net core 视图组件化

    视图组件可以通过partial view或viewcomponent实现 partialview https://docs.microsoft.com/zh-cn/aspnet/core/mvc/vi ...

  8. 【c3p0】 C3P0的三种配置方式以及基本配置项详解

    数据库连接池C3P0框架是个非常优异的开源jar,高性能的管理着数据源,这里只讨论程序本身负责数据源,不讨论容器管理. ---------------------------------------- ...

  9. php-生成数据库设计文档

    在线以及提供下载数据库设计文档 $dbserver = "192.168.128.190:42578"; $dbusername = "root"; $dbpa ...

  10. 前端之css笔记1

    1  css引入方式 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...