link。

解读一下,大概就是一种颜色放进去就会占据一行一列,dp 状态就好想了:\(f_{i,j,k}\) 表示恰好用完前 \(k\) 种颜色的所有棋子,占据了 \(i\) 行 \(j\) 列的方案数。你把已经被占据的行列挪到㮟㮟角角,这就导出了一个子问题,在一个 \((n-i)\times(m-j)\) 的矩形中,使用恰好 \(u\) 个棋子(注意不是种类,这也是子问题和原问题的区别)占据其中一些行列的方案数。

容易发现,我们比较关心的是占据的行列数,而其与整个 \((n-i)\times(m-j)\) 矩形的关联并不强(因为我们都可以把选出来的挪到㮟㮟角角),设占据了 \(x\) 行 \(y\) 列,最后把方案数乘 \(\binom{n}{x}\binom{m}{y}\) 即可。于是设 \(f'_{i,j,k}\) 表示用恰好 \(k\) 个棋子填满 \(i\times j\) 矩形的方案数。转移逐行考虑,上一行就填了 \(j\) 个棋子,设当前行填了 \(h\) 个棋子,有 \(l\) 列是和上一行共享,则当前行有 \(j+h-l\) 个格子有棋子,于是可以写出 \(f'_{i,j+h-l,k+h}=\sum\sum\binom{j+h-l}{,j}\binom{j}{l}f'_{i-1,j,k}\)。

看回到 \(f\) 的转移,考虑新棋子所占据的行列数 \(h,l\),则有 \(f_{i-h,j-l,k}=\sum\sum\binom{i}{h}\binom{j}{l}f_{i,j,k-1}f'_{h,l,a_k}\)。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD=1e9+9;
int n,m,c,a[20],mx,coef[40][40]; ll fac[110],ifac[110],dp[11][50][50],dpsub[50][50][1000],ans;
inline ll C(const int i,const int j) { assert(i>=j); return coef[i][j]; }
char buf[1<<21],*p1=buf,*p2=buf;
#define Gc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
int Gi() {
int x=0; char c=Gc(); bool f=0;
while(c<'0' || c>'9') f|=(c=='-'),c=Gc();
while(c>='0' && c<='9') x=x*10+(c&15),c=Gc();
return f?-x:x;
}
signed main() {
for(int i=0; i<=35; ++i) {
coef[i][0]=1;
for(int j=1; j<=i; ++j) coef[i][j]=(coef[i-1][j-1]+coef[i-1][j])%MOD;
}
n=Gi(); m=Gi(); c=Gi();
for(int i=1; i<=c; ++i) mx=max(mx,a[i]=Gi());
dpsub[0][0][0]=1;
for(int i=1; i<=n; ++i) {
for(int j=0; j<=m; ++j) {
for(int k=0; k<=mx; ++k) {
for(int h=1; h<=m; ++h) {
for(int l=0; l<=min(h,j); ++l) {
if(j+h-l<=m) (dpsub[i][j+h-l][k+h]+=C(j+h-l,j)*C(j,l)%MOD*dpsub[i-1][j][k]%MOD)%=MOD;
}
}
}
}
}
dp[0][n][m]=1;
for(int k=1; k<=c; ++k) {
for(int i=1; i<=n; ++i) {
for(int j=1; j<=m; ++j) {
for(int h=1; h<=i; ++h) {
for(int l=1; l<=j; ++l) (dp[k][i-h][j-l]+=C(i,h)*C(j,l)%MOD*dp[k-1][i][j]%MOD*dpsub[h][l][a[k]]%MOD)%=MOD;
}
}
}
}
for(int i=0; i<=n; ++i) {
for(int j=0; j<=m; ++j) ans+=dp[c][i][j],ans%=MOD;
}
printf("%lld\n",ans);
return 0;
}

「luogu - P3158」「cqoi 2011」放棋子的更多相关文章

  1. 「Luogu P2060 [HNOI2006]马步距离」

    一道神奇的BFS 前置芝士 BFS(DFS):这次真的不是我懒,我也不知道DFS怎么写. STL中的set或者map. 具体做法 数据范围非常大,直接BFS肯定是一片黑色(指TLE,MLE),直接贪心 ...

  2. 「CTSC 2011」排列

    「CTSC 2011」排列 要求不存在公差为 A 或者公比为 B 的子列,那么实际上可以把该问题转化为求一个图的最优拓朴序. 任意差为 A 或者比为 B 的两个数连一条边. 求一个合法序列的答案可以用 ...

  3. 「CTSC 2011」幸福路径

    [「CTSC 2011」幸福路径 蚂蚁是可以无限走下去的,但是题目对于精度是有限定的,只要满足精度就行了. \({(1-1e-6)}^{2^{25}}=2.6e-15\) 考虑使用倍增的思想. 定义\ ...

  4. 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇

    http://www.4gamer.net/games/216/G021678/20140714079/     连载第2回的本回,  Arc System Works开发的格斗游戏「GUILTY G ...

  5. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  6. SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法

    用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...

  7. 「Windows MFC 」「Edit Control」 控件

    「Windows MFC 」「Edit Control」 控件

  8. 「ZJOI2019」&「十二省联考 2019」题解索引

    「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...

  9. Loj #6069. 「2017 山东一轮集训 Day4」塔

    Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都 ...

  10. Loj #6073.「2017 山东一轮集训 Day5」距离

    Loj #6073.「2017 山东一轮集训 Day5」距离 Description 给定一棵 \(n\) 个点的边带权的树,以及一个排列$ p\(,有\)q $个询问,给定点 \(u, v, k\) ...

随机推荐

  1. Java(命令行传参、可变参数、递归

    1.命令行传参 通过命令行传参,main也可以传参 public class Hello { public static void main(String[] args) { for (int i = ...

  2. Conda 为什么越来越慢?

    作者:生信宝典 | 生信宝典公众号原文:https://mp.weixin.qq.com/s/OkOgN4j44MHNt1_noPVpzA Conda 为什么越来越慢? Conda 中包含的软件越来越 ...

  3. 【HarmonyOS】HarmonyOS应用APP与HAP包签名信息查看方法

    ​HarmonyOS可以通过DevEco Studio 构建对应的APP包或者是HAP包,对于签名我们有两种方式: DevEco Studio提供了根据开发者信息生成自动调试签名的能力方便各位开发者进 ...

  4. CSR格式如何更新? GES图计算引擎HyG揭秘之数据更新

    摘要:HyG图计算引擎采用CSR格式来存储图的拓扑信息,CSR格式可以将稀疏矩阵的存储空间压缩,进而大大降低图的存储开销,同时具备访问效率高.格式易转化等优点. 本文分享自华为云社区<CSR格式 ...

  5. js如何操作video标签

    一.简介 在做web ui自动化时,遇到操作视频的时候有时比较让人头疼,定位时会发现只有一个<video>标签,用selenium来实现的话比较麻烦,使用js后我们只需定位到video标签 ...

  6. mysql主从-主主架构设计

    前言: 1. mysql主从.主主复制应用场景很多,其原理主推,从定时根据binlog增量拉取更新 2. 如果主/从机器硬件负载过高,或者网络延迟就会造成同步延迟 3. 延迟是必然,mysql复制同步 ...

  7. JavaCV人脸识别三部曲之二:训练

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV人脸识别三部曲&g ...

  8. Microsoft Azure中用户注册、应用注册、授权

    背景 利用Microsoft Azure中令牌授予流读取登录用户信息(UserInfo),实现应用的单点登录: 1. 用户注册 此处用户注册,可以理解为一个管理员级别的用户注册: 点击注册:Azure ...

  9. 根据模板动态生成word(一)使用freemarker生成word

    @ 目录 一.准备模板 1.创建模板文件 2.处理模板 2.1 处理普通文本 2.2 处理表格 2.3 处理图片 二.项目代码 1.引入依赖 2.生成代码 三.验证生成word 一.准备模板 1.创建 ...

  10. requests高级用法、代理池搭建

    requests高级用法 1.自动携带cookie的session对象 # session对象---->已经模拟登录上了一些网站--->单独把cookie 取出来 import reque ...