http://www.lydsy.com/JudgeOnline/problem.php?id=3294

如果一个颜色的棋子放在了第i行第j列,那这种颜色就会占据第i行第j列,其他颜色不能往这儿放

设第k种颜色的棋子有a[k]个

令g[k][i][j] 表示第k种颜色的棋子,恰好占据i行j列的方案数

g[k][i][j]=C(i*j,a[k])-Σh Σl g[h][l]*C(i,h)*C(j,l)  1<=h<=i,1<=l<=j,且满足 h!=i 或 l !=j

即 总方案数(在i*j个格子中选a[k]个) 减去 没有恰好占据i行j列的方案数

令f[k][i][j] 表示前k种颜色的棋子,放完之后,还剩下i行j列的方案数

f[k][i][j]= Σh Σl f[k-1][h][l]*g[k][h-i][l-j]*C[h][h-i]*C[l][l-j]  i<h<=n,j<l<=m

即 枚举前k-1种颜色的棋子放完后,剩下h行l列,那么 第k种颜色就占据h-i行l-j列

  1. #include<cstdio>
  2.  
  3. using namespace std;
  4.  
  5. const int mod=1e9+;
  6.  
  7. #define min(x,y) x<y ? x : y
  8.  
  9. #define N 31
  10. #define M 11
  11.  
  12. int C[N*N][N*N];
  13.  
  14. int a[M];
  15. long long g[M][N][N],f[M][N][N];
  16.  
  17. int main()
  18. {
  19. int n,m,c;
  20. scanf("%d%d%d",&n,&m,&c);
  21. for(int i=;i<=c;++i) scanf("%d",&a[i]);
  22. int lim=n*m;
  23. C[][]=;
  24. for(int i=;i<=lim;++i)
  25. {
  26. C[i][]=;
  27. for(int j=;j<=i;++j) C[i][j]=(C[i-][j-]+C[i-][j])%mod;
  28. }
  29. int r1,r2;
  30. for(int k=;k<=c;++k)
  31. {
  32. r1=min(a[k],n);
  33. for(int i=;i<=r1;++i)
  34. {
  35. r2=min(a[k],m);
  36. for(int j=;j<=r2;++j)
  37. if(i*j>=a[k])
  38. {
  39. g[k][i][j]=C[i*j][a[k]];
  40. for(int h=;h<=i;++h)
  41. for(int l=;l<=j;++l)
  42. if((h!=i || l!=j) && h*l>=a[k])
  43. {
  44. g[k][i][j]-=g[k][h][l]*C[i][h]%mod*C[j][l]%mod;
  45. if(g[k][i][j]<) g[k][i][j]+=mod;
  46. }
  47. }
  48. }
  49. }
  50. f[][n][m]=;
  51. for(int k=;k<=c;++k)
  52. for(int i=;i<n;++i)
  53. for(int j=;j<m;++j)
  54. for(int h=i+;h<=n;++h)
  55. for(int l=j+;l<=m;++l)
  56. if((h-i)*(l-j)>=a[k])
  57. f[k][i][j]=(f[k][i][j]+f[k-][h][l]*g[k][h-i][l-j]%mod*C[h][h-i]%mod*C[l][l-j]%mod)%mod;
  58. int ans=;
  59. for(int i=;i<n;++i)
  60. for(int j=;j<m;++j)
  61. {
  62. ans+=f[c][i][j];
  63. if(ans>=mod) ans-=mod;
  64. }
  65. printf("%d",ans);
  66. return ;
  67. }

3294: [Cqoi2011]放棋子

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 797  Solved: 319
[Submit][Status][Discuss]

Description

 

Input

输入第一行为两个整数n, m, c,即行数、列数和棋子的颜色数。
第二行包含c个正整数,即每个颜色的棋子数。
所有颜色的棋子总数保证不超过nm。
N,M<=30 C<=10 总棋子数有大于250的情况
 

Output

输出仅一行,即方案总数除以 1,000,000,009的余数。

Sample Input

4 2 2
3 1

Sample Output

8

bzoj千题计划261:bzoj3294: [Cqoi2011]放棋子的更多相关文章

  1. bzoj3294[Cqoi2011]放棋子 dp+组合+容斥

    3294: [Cqoi2011]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 755  Solved: 294[Submit][Status] ...

  2. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  3. BZOJ3294: [Cqoi2011]放棋子

    Description   Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数保证不超过nm. Output 输出 ...

  4. bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对

    http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间:i<=j 权值大小 ...

  5. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  6. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  7. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  8. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

  9. bzoj千题计划307:bzoj5248: [2018多省省队联测]一双木棋

    https://www.lydsy.com/JudgeOnline/problem.php?id=5248 先手希望先手得分减后手得分最大,后手希望先手得分减后手得分最小 棋盘的局面一定是阶梯状,且从 ...

随机推荐

  1. WayOS计费对接(零点计费系统)详细教程

    零点计费系统开发也有两年了,一直都是自己和朋友在使用,今年开始有对外免费开发体验的想法,在此简单介绍一下wayos和零点计费的对接教程. 可到官网www.feidian8.com里面的首页点击查看零点 ...

  2. Beta阶段事后分析

    1. 设想和目标 1.1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们在Beta阶段任务主要分为两部分,一类是对原功能的扩展,一类是新的博文功能.我们通过规 ...

  3. SDN可靠性相关

    A subtree-based approach to failure detection and protection for multicast in SDN FRONTIERS OF INFOR ...

  4. 解决p4c安装时protobuf未定义引用的错误

    安装好p4c的依赖之后,执行make -j2时出现以下问题: undefined references to `google::protobuf::internal::LogMessage::oper ...

  5. 从零开始学Kotlin-数据类型(2)

    从零开始学Kotlin基础篇系列文章 基本数据类型 Kotlin 的基本数值类型包括 Byte.Short.Int.Long.Float.Double 等: 数据-------位宽度 Double-- ...

  6. HTTP协议(1)

    HTTP 协议笔记 1. HTTP 传输机制 HTTP 是一个应用层协议,位于 TCP 的层次之上,并且是基于 TCP 协议进行通信的,也就是说 HTTP 在每一次通信之前都要先建立 TCP 连接来保 ...

  7. Oracle 最新版本变化 转帖

    版本更迭 http://www.sohu.com/a/163264045_505827 Oracle Database的下一个版本将是 Oracle 18. 目的 为了更快的.通过每年的版本发布将新特 ...

  8. 如何将adoquery中的数据复制到 Ttable 中

    Delphi 7.0  控件:  adoquery1:Tadoquery               table1       :Ttable adoquery1 open  后  如何将数据复制到t ...

  9. TCP协议 连接三次握手

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  10. 轻松学JVM

    轻松学JVM(一)——基本原理 前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM ...