题目链接: https://atcoder.jp/contests/agc002/tasks/agc002_f

题解: 讲一下官方题解的做法: 就是求那个图(官方题解里的)的拓扑序个数,设\(dp[i][j]\)表示有\(i\)个0色和\(j\)个非0色的图的拓扑序个数(\(i<j\)),则转移一是加入一个0色球,二是加入一个非0色球(拓扑序以非0色球开始),这种情况下我们固定了开头所以还剩\(((K-1)j+i-1)\)个位置放入\((K-2)\)个球,\(dp[i][j]=dp[i-1][j]+dp[i][j-1]\times {\comb{(K-1)j+i-1}{K-2}}\).

另外有一种反着的做法(我代码写的就是这个),但是并不懂(曾经懂过但是现在脑子又乱了)

启示: 这种计数很多都是考虑第一个,千万不要惯性思维无脑考虑最后一个!!!

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#define llong long long
using namespace std;const int N = 2000;
const int P = 1e9+7;
llong dp[N+3][N+3];
llong fact[5000003],finv[5000003];
int n,m;llong quickpow(llong x,llong y)
{llong cur = x,ret = 1ll;for(int i=0; y; i++){if(y&(1ll<<i)) {y-=(1ll<<i); ret = ret*cur%P;}cur = cur*cur%P;}return ret;
}llong comb(llong x,llong y) {return x<0 || y<0 || x<y ? 0ll : fact[x]*finv[y]%P*finv[x-y]%P;}int main()
{fact[0] = 1ll; for(int i=1; i<=5000000; i++) fact[i] = fact[i-1]*i%P;finv[5000000] = quickpow(fact[5000000],P-2); for(int i=5000000-1; i>=0; i--) finv[i] = finv[i+1]*(i+1)%P;scanf("%d%d",&n,&m);if(m==1) {printf("1"); return 0;}dp[0][0] = 1ll;for(int i=1; i<=n; i++){dp[i][0] = 1ll;for(int j=1; j<=i; j++){dp[i][j] = dp[i-1][j];dp[i][j] += comb((n-i)+(n-(j-1))*(m-1)-1,m-2)*dp[i][j-1]%P;dp[i][j] %= P;}}llong ans = dp[n][n]*fact[n]%P;printf("%lld\n",ans);return 0;
}

AtCoder AGC002F Leftmost Ball (DP、组合计数)相关推荐

  1. AGC002F - Leftmost Ball(dp,组合计数)

    AGC002F - Leftmost Ball Solution 设fi,jf_{i,j}fi,j​表示放iii个白球,确定了jjj个颜色的球的位置的方案数. 有两种转移: 放白球,fi,j−> ...

  2. AtCoder 2000 [AGC002F] Leftmost Ball(dp+组合数)

    problem 洛谷链接 solution 显然,合法序列的状态要求任何一个前缀的白色球数≥\ge≥已出现的不同颜色数. 所以可以将球分成白色球和有颜色球两类球分开放. 其次,有颜色球一类重要的是有颜 ...

  3. Sit sit sit HDU - 5151 (区间dp +组合计数)

    这道这道区间DP,我也开始觉得其实区间DP是一种应用型的思想,做这类题目一个重要的点是在于题目情景的把握,这道题的一个情景就是数学的排列组合问题. 首先应用根据小区间推出大区间的思路,我们可以先固定一 ...

  4. CF1237F Balanced Domino Placements(dp+组合计数)

    CF1237F Balanced Domino Placements problem solution code problem 题目链接 solution 骨牌横着放会占用一行两列,骨牌竖着放会占用 ...

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

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

  6. CF1237F Balanced Domino Placements(组合计数,dp)

    CF1237F Balanced Domino Placements Solution 显然可以先考虑横着的骨牌,再考虑竖着的骨牌.但是思路卡在了选取横着的骨牌会对竖着的骨牌的相邻对数产生影响. 然而 ...

  7. 数学知识——组合计数

    组合计数 文章目录 组合计数 概述 动态规划 牡牛和牝牛 思路 代码 隔板法 方程的解 思路 代码 序列统计 思路 代码 加法 & 乘法原理 加法原理 乘法原理 车的摆放 思路 代码 容斥原理 ...

  8. 解题报告(五)组合计数(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 解题报告(二)E、(BZOJ3513) [MUTC2013] idiots(生成函数 + FFT + 组合计数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. 读后感和机翻《他们在看哪里,为什么看?在复杂的任务中共同推断人类的注意力和意图》
  2. 菜鸟学习.Net的感想!
  3. oracle分区交换有啥好处,分区交换的速度为什么快?
  4. RHEL系统网络安装(kikstart)
  5. Java集合框架:WeakHashMap
  6. 是单片机高手还是菜鸟?看看你的程序框架就知道了
  7. html选中列表整列变色,excel选中行变色完整代码和动画效果
  8. 代码在eclipse下不报错,在doc命令行下报错--jar file和runable jar file
  9. javascript入门之私有变量
  10. stm32最小系统板原理图_嵌入式单片机之STM32F103C8T6最小系统板电路设计参考
  11. [转]https配合移动端开发
  12. 学习Java可以干什么?
  13. 峰值电流检测电路设计/自己备忘
  14. 三个月来美国又有一万家餐馆因疫情倒闭或关闭;爱彼迎帮助在危机中的人寻找临时住宿 | 美通企业日报...
  15. 利用python绘制简易词云图(使用jieba进行中文分词)
  16. 安全生产月知识竞赛——新安法知多少
  17. 怎么样可以申请免费的云主机?
  18. log4j日志文件乱码问题的解决方法
  19. ETF动量轮动+RSRS择时,RSRS修正标准分,回撤降至16%
  20. 告别“限速”,个人网盘进入云时代

热门文章

  1. 官方wdpc安装文档,推荐RPM包安装
  2. Linux下window转unix文件格式
  3. hdc和hwnd的区别
  4. <%=(String)request.getAttribute(““) %>的作用是什么
  5. geth安装失败,双击后不显示或等待很久后报错
  6. Unity3D:创建对象
  7. SpringBoot Test及注解详解(含Mockito)
  8. Java8新特性之stream的详细用法
  9. STM32开发 -- 蓝牙开发详解(2)
  10. STM32开发 -- 低功耗模式详解(2)