AGC002F Leftmost Ball
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\)个球。
综上所述:
\]
\]
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的更多相关文章
- AtCoder AGC002F Leftmost Ball (DP、组合计数)
题目链接: https://atcoder.jp/contests/agc002/tasks/agc002_f 题解: 讲一下官方题解的做法: 就是求那个图(官方题解里的)的拓扑序个数,设\(dp[i ...
- 【agc002f】Leftmost Ball(动态规划)
[agc002f]Leftmost Ball(动态规划) 题面 atcoder 洛谷 题解 我们从前往后依次把每个颜色按顺序来放,那么如果当前放的是某种颜色的第一个球,那么放的就会变成\(0\)号颜色 ...
- 【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 ...
- 【AtCoder】AGC022 F - Leftmost Ball 计数DP
[题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...
- ATcoder 2000 Leftmost Ball
Problem Statement Snuke loves colorful balls. He has a total of N×K balls, K in each of his favorite ...
- 【AGC002F】Leftmost Ball DP 数学
题目大意 有\(n\)种颜色的球,每种\(m\)个.现在zjt把这\(nm\)个球排成一排,然后把每种颜色的最左边的球染成第\(n+1\)种颜色.求最终的颜色序列有多少种,对\(1000000007\ ...
- 【agc002f】Leftmost Ball
题目大意 有n种颜色,每种k个球.将这些球任意排列,将每种颜色中最前面的一个求涂成白色(就是n+1种颜色),求最终的排列的方案的个数. 解题思路 考虑如何计算不会算重, 按颜色顺序,每次往排列插入k个 ...
- AtCoder Grand Contest 002 (AGC002) F - Leftmost Ball 动态规划 排列组合
原文链接https://www.cnblogs.com/zhouzhendong/p/AGC002F.html 题目传送门 - AGC002F 题意 给定 $n,k$ ,表示有 $n\times k$ ...
- AGC002 F - Leftmost Ball
貌似哪里讲过这题..总之当时掉线了(理解能力又差水平又低选手的日常).. 看看题目,应该是DP. 尝试了几次换状态,毫无思路.那我们就来继续挖掘性质吧...为了更直观,我们令第i个出现的球颜色就是i( ...
随机推荐
- yii2中的rules 自定义验证规则详解
yii2的一个强大之处之一就是他的Form组件,既方便又安全.有些小伙伴感觉用yii一段时间了,好嘛,除了比tp"难懂"好像啥都没有. 领导安排搞一个注册的功能,这家伙刷刷刷的又是 ...
- db2表空间及日志文件调整
1.SQLState '57011' and errorCode '-964' 原因:数据库的日志文件已满 解决方法:修改日志文件大小(加大),增加日志文件个数,增加辅助日志文件个数(三个修改参数 ...
- Codeforces 660A. Co-prime Array 最大公约数
A. Co-prime Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- HDOJ1242 Rescue(营救) 搜索
Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 连接数据库-corina
import pymysqlimport pandas as pdfrom pandas import DataFramefrom sqlalchemy import create_engine cl ...
- MySQL 组合查询 concat
concat( pms_user.f_pu_name, '(' , pms_user.f_pu_realName,')') as userIds
- sqoop 安装使用
安装配置: 1.将sqoop-1.4.4.tar.gz 上传到/usr/local/ 2.解压 tar -zxvf sqoop-1.4.4.tar.gz 3.配置 vim /etc/profile 在 ...
- Android 控制ScrollView滚动到底部或顶部
在开发中,我们经常需要更新列表,并将列表拉倒最底部,比如发表微博,聊天界面等等, 这里有两种办法,第一种,使用scrollTo(): public static void scrollToBottom ...
- Android系统root破解原理分析
http://dengzhangtao.iteye.com/blog/1543494 root破解过程的终极目标是替换掉系统中的su程序.但是要想替换掉系统中su程序本身就是需要root权限的,怎样在 ...
- 2018.09.01 loj#2330. 「清华集训 2017」榕树之心(树形dp)
传送门 树形dp好题啊. 我们用w[i]" role="presentation" style="position: relative;">w[ ...