【题目】F - Leftmost Ball

【题意】给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列。n,k<=2000。

【算法】计数DP

【题解】只看黑体字部分即可

自己考虑了几种计数方案,都不能实现。一种从左到右,但要记录每种球剩余多少,不可行。一种从右到左枚举白球包含区间填充,但因为只看白球,每种颜色没有关键球,会有重复统计的问题。

计数的关键在于白球的原色不重要以及每种颜色关注最左端的球(这里不含变成白球的球)。

本题既然nk能分开,就没必要整个序列推进,只抽象地枚举白球数和颜色数就可以了,这是因为本题的条件很优美,不需要考虑位置的因素。

设$f[i][j]$表示前i个白球,仅包含j种颜色的最大前缀的排列数。这里只要保证$j \leq i$就可以满足颜色数不多于白球数。

转移可以增加一个白球,或增加一种颜色。增加颜色时固定最左端球的位置,然后在前面球剩余的位置任意填充。(这里既不考虑填充前面剩余位置的问题,因为紧凑。也不考虑前面每种球的剩余数量,因为每种填充方案的剩余位置数都是确定的。计数问题常常考虑每一种前面的方案共有的性质然后抽象出来转移,即对于前面每一个方案如何如何后就变成现在的方案)

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

后面的(n-j+1)可以改为最后乘上n!。

复杂度O(n^2)。

代码来自:zhanglexing

#include<cstdio>
#define ll long long
const int N=,M=4e6+,mo=1e9+;
int n,m,nm,i,j,f[N];
int fact[M],inv[M],fv[M];
void init(int n){
fact[]=fact[]=inv[]=fv[]=fv[]=;
for (i=;i<=n;i++){
fact[i]=(ll)fact[i-]*i%mo;
inv[i]=(ll)inv[mo%i]*(mo-mo/i)%mo;
fv[i]=(ll)fv[i-]*inv[i]%mo;
}
}
int C(int n,int m){return (ll)fact[n]*fv[m]%mo*fv[n-m]%mo;}
int main(){
scanf("%d%d",&n,&m);m--;
if (!m){puts("");return ;}
nm=n*m+n;init(nm);f[]=;
for (i=;i<=n;i++) for (j=;j<=i;j++)
f[j]=(f[j]+(ll)(n-j+)*
C(nm-i-(j-)*m-,m-)%mo*f[j-])%mo;
printf("%d",f[n]);
}

【AtCoder】AGC022 F - Leftmost Ball 计数DP的更多相关文章

  1. Atcoder Grand Contest 002 F - Leftmost Ball(dp)

    Atcoder 题面传送门 & 洛谷题面传送门 这道 Cu 的 AGC F 竟然被我自己想出来了!!!((( 首先考虑什么样的序列会被统计入答案.稍微手玩几组数据即可发现,一个颜色序列 \(c ...

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

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

  3. AGC002 F Leftmost Ball——DP

    题目:https://atcoder.jp/contests/agc002/tasks/agc002_f 充要条件是前缀0的个数 >= 颜色种数. 设计 DP ,放一个颜色的时候就把所有该颜色的 ...

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

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

  5. AGC002 F - Leftmost Ball

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

  6. ATcoder 2000 Leftmost Ball

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

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

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

  8. [DP之计数DP]

    其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...

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

随机推荐

  1. python读取文件解码失败

    python2.7 urllib2 抓取新浪乱码 中的: 报错的异常是 UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2 ...

  2. 视频剪辑软件-PR (Adobe Premiere)

    1.PR 是什么? Adobe Premiere 是一款常用的视频编辑软件,由Adobe公司推出.PR是一款编辑画面质量较好的软件,有较好的兼容性,且可以与Adobe公司推出的其他软件相互协作.目前这 ...

  3. UVALive6443_Alien Abduction Again

    题意为给你若干个三次函数,以及每一个函数所分布的区间,由于每个函数的所有的系数都是整数,所以最后的函数在整数点处的值也是整数. 现在每次可以插入函数或者询问区间,现在要求每次询问区间后,所有的函数在这 ...

  4. Luogu4884 多少个1?(BSGS)

    11……1(n个)=99……9(n个)/9=(10n-1)/9. 那么显然就是求离散对数了,BSGS即可. #include<iostream> #include<cstdio> ...

  5. 加密,解密web.config数据库连接字符串

    "connectionStrings" 路径是web.config所在的工程目录. 1.加密EncryptWebConfig.bat @echo offC:\Windows\Mic ...

  6. P1110 [ZJOI2007]报表统计

    题目描述 Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细观察,小Q发现统计一张报表实际上是维护一个非负整数数列,并 ...

  7. http的无状态无连接

    搞爬虫的核心:http协议. 在理解http中的无状态和无连接时,有一些困惑,下文可以解决. 转自:http://www.cnblogs.com/bellkosmos/p/5237146.html h ...

  8. Java开发23种设计模式

    设计模式(Design Patterns) -- --  -- 可复用面向对象软件的基础 设计模式(Design Patterns)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. ...

  9. 【BZOJ1914】数三角形(组合数,极角排序)

    [BZOJ1914]数三角形(组合数,极角排序) 题面 BZOJ权限题 良心洛谷 题解 这种姿势很吼啊,表示计算几何啥的一窍不通来着. 题目就是这样,正难则反,所以我们不考虑过原点的三角形, 反过来, ...

  10. 遇到问题---java---安装新版本jdk后Failed reading value of registry key

    情况 情况是原本安装有jdk1.7,能正常运行,现在要升级到1.8. 直接在oracle的网站下载1.8安装后修改配置为1.8后: 能用javac编译成功,但java命令运行时报错: Failed r ...