3294: [Cqoi2011]放棋子

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 628  Solved: 238
[Submit][Status][Discuss]

Description

 

Input

输入第一行为两个整数nmc,即行数、列数和棋子的颜色数。第二行包含c个正整数,即每个颜色的棋子数。所有颜色的棋子总数保证不超过nm

Output

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

Sample Input

4 2 2
3 1

Sample Output

8

HINT

N,M<=30 C<=10 总棋子数<=250

Source

分析:

上课不好好听课的我TAT...

此题最重要的思想感觉是补集转化思想...

f[i][j][k]代表前k种颜色占据了i行j列的方案数,那么怎么转移...

f[i][j][k]=Σf[i-x][j-y][k-1]*g[x][y][k]*c[i][x]*c[j][y]

g[x][y][k]代表什么?第k种颜色刚好占据了x行y列...感觉这个转移还是很好想的...

但是问题来了...g[x][y][k]怎么求...

我们可以转化为总方案数减去不合法的方案数,也就是g[i][j][k]=c[i*j][num[k]]-Σg[x][y][k]*c[i][x]*c[j][y]...

注意边界...WA了好几次...QAQ...

代码:

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
#define int long long
using namespace std; const int maxn=+,MOD=1e9+; int n,m,co,ans,num[maxn],c[maxn*maxn][maxn*maxn],f[maxn][maxn][maxn],g[maxn][maxn][maxn]; signed main(void){
memset(f,,sizeof(f));
memset(g,,sizeof(g));
scanf("%lld%lld%lld",&n,&m,&co);
for(int i=;i<=co;i++)
scanf("%lld",&num[i]);
for(int i=;i<=;i++)
c[i][]=c[i][i]=;
for(int i=;i<=;i++)
for(int j=;j<i;j++)
c[i][j]=(c[i-][j-]+c[i-][j])%MOD;
for(int k=;k<=co;k++)
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(i*j>=num[k]&&max(i,j)<=num[k]){
g[i][j][k]=c[i*j][num[k]];
for(int x=;x<=i;x++)
for(int y=;y<=j;y++)
if((i-x)||(j-y))
g[i][j][k]=(g[i][j][k]-g[x][y][k]*c[i][x]%MOD*c[j][y]%MOD+MOD)%MOD;
}
f[][][]=;
for(int k=;k<=co;k++)
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(i*j>=num[k]){
for(int x=;x<=i;x++)
for(int y=;y<=j;y++)
(f[i][j][k]+=f[i-x][j-y][k-]*g[x][y][k]%MOD*c[i][x]%MOD*c[j][y]%MOD)%=MOD;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
(ans+=f[i][j][co]*c[n][i]%MOD*c[m][j]%MOD)%=MOD;
printf("%lld\n",ans);
return ;
}

by NeighThorn

BZOJ 3294: [Cqoi2011]放棋子的更多相关文章

  1. BZOJ 3294: [Cqoi2011]放棋子 计数 + 容斥 + 组合

    比较头疼的计数题. 我们发现,放置一个棋子会使得该棋子所在的1个行和1个列都只能放同种棋子. 定义状态 $f_{i,j,k}$ 表示目前已使用了 $i$ 个行,$j$ 个列,并放置了前 $k$ 种棋子 ...

  2. BZOJ 3294: [Cqoi2011]放棋子(计数dp)

    传送门 解题思路 设\(f[i][j][k]\)表示前\(k\)个颜色的棋子占领了\(i\)行\(j\)列的方案数,那么转移时可以枚举上一个颜色时占领的位置,\(f[i][j][k]=\sum\lim ...

  3. 【BZOJ 3294】 3294: [Cqoi2011]放棋子 (DP+组合数学+容斥原理)

    3294: [Cqoi2011]放棋子 Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数 ...

  4. bzoj千题计划261:bzoj3294: [Cqoi2011]放棋子

    http://www.lydsy.com/JudgeOnline/problem.php?id=3294 如果一个颜色的棋子放在了第i行第j列,那这种颜色就会占据第i行第j列,其他颜色不能往这儿放 设 ...

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

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

  6. [CQOI2011]放棋子 (DP,数论)

    [CQOI2011]放棋子 \(solution:\) 看到这道题我们首先就应该想到有可能是DP和数论,因为题目已经很有特性了(首先题面是放棋子)(然后这一题方案数很多要取模)(而且这一题的数据范围很 ...

  7. [洛谷P3158] [CQOI2011]放棋子

    洛谷题目链接:[CQOI2011]放棋子 题目描述 在一个m行n列的棋盘里放一些彩色的棋子,使得每个格子最多放一个棋子,且不同 颜色的棋子不能在同一行或者同一列.有多少祌方法?例如,n=m=3,有两个 ...

  8. P3158 [CQOI2011]放棋子(dp+组合数)

    P3158 [CQOI2011]放棋子 放棋子的顺序和方案数无关,所以可以从按颜色递推 设$f[u][p][k]$为放到第$u$种颜色,所剩空间$p*k$的方案数 $g[u][i][j]$表示第$u$ ...

  9. BZOJ3294: [Cqoi2011]放棋子

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

随机推荐

  1. 初次使用 git 的“核弹级选项”:filter-branch 从仓库中删除文件

    当初看 Pro Git 时就被作者这个“核弹级选项”的称呼吓到了,因此一直没敢好奇地去尝试.核弹啊,用对了威力无穷,用错了破坏力无穷! 但是,今天,我不得不用了,因为我想把我的原来写一些代码放到 gi ...

  2. 心理控制方法——阅读Notes

    1.自助式情感手术 祛除自我意象中的伤疤的要点 2. 你制造错误,但是错误不应造就你    你身上的缺点不是你的错  3. 不仅要原谅别人,也要原谅自己 4. 怨恨是一条通向失败的道路 5. 注意来 ...

  3. 在【Xamarin+Prism开发详解三:Visual studio 2017 RC初体验】中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很是感兴趣。于是发时间深入研究了一下Visual Studio 2017RC 是不是和微软Connect()://2016上说得一样神。

    总共列出了12点,耐心点慢慢看! 1,添加了不少[代码样式]的设置项目. 通过合理的设置每个人都能写出优美的代码,而且团队项目也可以达到统一代码风格. this首选项:可以设置[字段,属性,方法,事件 ...

  4. python 读写文件

    #! -*- encoding:utf-8 -*- import os from config import * from function import GetCsspToken, RegistIn ...

  5. 用CSS3实现背景的固定

    今天放假了,正好最近养成了没事泡泡博客园的习惯,自己也有了博客..不得不吐槽一下博客园为什么页面这么古朴,,带的几个模版也没啥意思,反正不符合我口味,幸亏后台提供了编辑CSS的功能,于是我就搬来现有的 ...

  6. [转载]DBA的特质第二部分:性格

    本文转自http://www.searchdatabase.com.cn/showcontent_84382.htm 支持原创.尊重原创,分享知识! 在本系列文章中,笔者将谈一谈数据库管理员(DBA) ...

  7. Java Se:自定义ClassLoader

    JVM是如何知道java.lang包中的类的?JVM又是如何知道我们应用中的类的?我们的应用中明明是有某个类, 但是JVM却抛出ClassNotFoundException,这是为什么?XxxImpl ...

  8. linux 拨号+squid监控脚本

    客户端 #!/bin/bash #get_memory-info a=`free -m|grep Mem|awk '{print$2}'` #total-memory b=`free -m|grep ...

  9. 前端构建工具gulp介绍

    2016年3月3日 10:46:08     晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...

  10. Linux学习--------二

    Linux基础知识 Linux文件系统为一个倒转的单根树状结构文件系统的根为"/" 文件系统严格区分大小写路径 使用"/"分割(windows使用"\ ...