【agc002f】Leftmost Ball(动态规划)

题面

atcoder
洛谷

题解

我们从前往后依次把每个颜色按顺序来放,那么如果当前放的是某种颜色的第一个球,那么放的就会变成\(0\)号颜色,所以无论何时,\(0\)号颜色的数量不能少于其他颜色的数量。

可以设状态\(f[i][j]\)表示前面一共放了\(i\)个\(0\)号颜色的球,而一共出现了\(j\)种其他颜色的球,根据上面的东西,可以知道\(i\ge j\)。每次转移我们分成两种考虑。第一种就直接在后面接一个\(0\)号颜色的球,这个不需要考虑任何决策,直接转移即可,也就是\(f[i][j]+=f[i-1][j]\)。另外一种转移是选择一共新的颜色,抛去前面已经放好的\(0\)号颜色的前,抛去当前位置放下一个当前颜色的球,那么还需要在后面选择\(k-2\)个位置来放这些球,而后面剩下的空位个数显然是可以算的。首先还剩下\(n-i\)个\(0\)号颜色的球没有放,所以提供\(n-i\)个空位,前面一共只出现了\(j-1\)种颜色,所以还有\((n-j+1)*(k-1)\)个空位,但是当前的位置被钦定放这种新的颜色,所以还要减少一个位置。

也就是转移长成这个样子:

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

时间复杂度\(O(nk)\)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
#define MAX 2010
#define MOD 1000000007
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
inline int read()
{int x=0;bool t=false;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=true,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return t?-x:x;
}
int n,k,mx,f[MAX][MAX];
int jc[MAX*MAX],jv[MAX*MAX],inv[MAX*MAX];
int C(int n,int m){return 1ll*jc[n]*jv[m]%MOD*jv[n-m]%MOD;}
int main()
{n=read();k=read();mx=n*k;if(k==1){puts("1");return 0;}jc[0]=jv[0]=inv[0]=inv[1]=1;for(int i=1;i<=mx;++i)jc[i]=1ll*jc[i-1]*i%MOD;for(int i=2;i<=mx;++i)inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;for(int i=1;i<=mx;++i)jv[i]=1ll*jv[i-1]*inv[i]%MOD;f[0][0]=1;for(int i=1;i<=n;++i)for(int j=0;j<=i;++j){add(f[i][j],f[i-1][j]);if(j)add(f[i][j],1ll*f[i][j-1]*(n-j+1)%MOD*C((n-i)+(n-j+1)*(k-1)-1,k-2)%MOD);}printf("%d\n",f[n][n]);return 0;
}

转载于:https://www.cnblogs.com/cjyyb/p/9705631.html

【agc002f】Leftmost Ball(动态规划)相关推荐

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

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

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

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

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

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

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

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

  5. AGC002(D~F)【Kruskal重构树,博弈论,dp】

    正题 AT1998 [AGC002D] Stamp Rally[Kruskal重构树,倍增] https://www.luogu.com.cn/problem/AT1998 题目大意 给出nnn个点m ...

  6. AGC002[BCDEF]题解

    F是计数于是就做(kan ti jie)了= = B - Box and Ball 模拟一下 每个盒子开一个d表示有的球数 可能存在红球的打个标记 传递一下就行了 #include<cstdio ...

  7. atcoder题目合集(持续更新中)

    Choosing Points 数学 Integers on a Tree 构造 Leftmost Ball 计数dp+组合数学 Painting Graphs with AtCoDeer tarja ...

  8. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  9. 动态规划的特点及其应用[安徽 张辰]

    动态规划的特点及其应用安徽 张辰   目 录 (点击进入) [关键词][摘要][正文] §1动态规划的本质 §1.1多阶段决策问题 §1.2阶段与状态 §1.3决策和策略 §1.4最优化原理与无后效性 ...

最新文章

  1. Solidity基础入门知识(十)函数的访问权限和可见性
  2. Asp.net实现在线截图(大图截取为小图)
  3. sql语句查询商品的一二三级分类都是一个字段怎么办_畅购商城(三):商品管理...
  4. 和Facebook竞争,社交平台Mico怎样在1年内获得3000万用户?
  5. 我行贿了 I Paid A Bribe! --印度IPAB中国官方网站 - 民间反腐网站“我行贿了”网址大盘点...
  6. 远程连接IBM MQ 7.5的“AMQ4036”错误解决
  7. dout java,java socket 发送文件
  8. 修改JBoss-7.1.1 http访问端口并取消JBoss内网访问限制
  9. TIA Portal联合Process Simulate搞定SICAR虚拟调试实例步骤
  10. X-Scan 端口扫描工具下载和使用教程
  11. 声音鉴定-趣味测试-源码
  12. 即拿即用-Android单线程断点下载
  13. 多屏信号服务器,多屏图像拼接处理器 多种信号输出输入
  14. 怎么在服务器上接无线路由器,交换机怎么用 交换机接无线路由器设置教程【详解】...
  15. matplotlib科研绘图---Times New Roman字体设置
  16. 盯盯拍CEO 罗勇现身云栖大会 畅谈车联网生态并发布全新产品mini3
  17. 读《麦田里的守望者》(塞林格)
  18. 馄饨 (hún tun)
  19. 拷机测试需要多久_网站建设要多久?
  20. 哈工大计算机系统Lab4.Tiny Shell

热门文章

  1. php上传大文件时,服务器端php.ini文件中需要额外修改的选项
  2. Delphi读写二进制文件
  3. 【练习5.9】图像掩码、礼帽、cvCopy、图像融合、cvCvtColor
  4. 为什么下了android 4.1 的SDK后在本地用浏览器看api说明文档时,浏览器打开api的html文件很慢?试了好几款浏览器都一样。为什么?...
  5. 类中匿名函数如何从 event 中去除
  6. DHCP|什么是DHCP|DHCP介绍
  7. Linux下的 FTP
  8. Memcached和Redis
  9. RUNOOB python练习题27 递归逆向输出字符串
  10. Lecture 15 Dynamic Programming