逐个去除限制。第四个限制显然可以容斥,即染恰好c种颜色的方案数=染至多c种颜色的方案数-染至多c-1种颜色的方案数+染至多c-2种颜色的方案数……

  然后是限制二。同样可以容斥,即恰好选n行的方案数=至多选n行的方案数-至多选n-1行的方案数+至多选n-2行的方案数……

  限制三同理。即容斥套容斥套容斥。复杂度O(nmc)。

  注意到容斥式子和二项式定理有千丝万缕的联系,用二项式定理去掉一维变成O(nclogm)。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
#define N 410
#define P 1000000007
int n,m,c,ans,C[N][N];
void inc(int &x,int y){x+=y;if (x>=P) x-=P;}
int ksm(int a,int k)
{int s=1;for (;k;k>>=1,a=1ll*a*a%P) if (k&1) s=1ll*s*a%P;return s;
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("bzoj4487.in","r",stdin);freopen("bzoj4487.out","w",stdout);const char LL[]="%I64d\n";
#elseconst char LL[]="%lld\n";
#endifn=read(),m=read(),c=read();C[0][0]=1;for (int i=1;i<=400;i++)    {C[i][0]=C[i][i]=1;for (int j=1;j<i;j++)C[i][j]=(C[i-1][j]+C[i-1][j-1])%P;}for (int i=c;i>=0;i--)for (int j=n;j>=1;j--)if ((c-i+n-j+m&1)^(m&1)) inc(ans,P-1ll*C[c][i]*C[n][j]%P*ksm(ksm(i+1,j)-1,m)%P);else inc(ans,1ll*C[c][i]*C[n][j]%P*ksm(ksm(i+1,j)-1,m)%P);cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/Gloid/p/9882934.html

BZOJ4487 JSOI2015染色问题(组合数学+容斥原理)相关推荐

  1. BZOJ4487 [JSO12015] 染色问题 容斥原理

    给出一个n×m,n,m≤4e2n×m,n,m\leq4e2n×m,n,m≤4e2的矩阵,并且有c≤4e2c\leq4e2c≤4e2种颜色,对于每一个小方格,你可以任选一个给它染色.给出条件:每个小方格 ...

  2. UVA - 11806 Cheerleaders(组合数学+容斥原理)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,现在有k个拉拉队员,要求在第一列.最后一列.第一行和最后一行至少有一个拉拉队员,注意以下要求: 四个角上的拉拉队员可以同时属于两条边 每个方格至多只 ...

  3. 组合数学—容斥原理与鸽巢原理

    目录 一 写在开头 二 容斥原理 三 鸽巢原理 四 Ramsey定理 五 Burnside引理与波利亚定理 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 写在开头 本文内容为<组合数 ...

  4. bzoj 4710 [Jsoi2011]分特产 组合数学+容斥原理

    题面 题目传送门 解法 考虑容斥原理 显然,我们可以枚举有多少个人没有收到 然后就转化成一个组合问题了 假设现在有\(x\)个物品,\(n\)个人,可以有人没有被分到,那么分给这\(n\)个人的方案数 ...

  5. bzoj 4487: [Jsoi2015]染色问题

    先贴一个题解吧,最近懒得要死2333,可能是太弱的原因吧,总是扒题解,(甚至连题解都看不懂了),blog也没更新,GG http://blog.csdn.net/werkeytom_ftd/artic ...

  6. 组合数学-容斥原理-求指定区间内与n互素的数的个数

    求指定区间内与n互素的数的个数 给出整数n和r.求区间[1,r]中与n互素的数的个数. 去解决它的逆问题,求不与n互素的数的个数. 考虑n的所有素因子pi(i=1···k) 在[1,r]中有多少数能被 ...

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

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

  8. 组合数学 | 容斥原理与鸽巢原理

    目录 容斥原理 鸽巢原理 容斥原理 德摩根定理:设A,B为全集U的任意两个子集,则 德摩根定理推广:设A1,A2-An为U的子集,则 容斥原理: 两个集合的容斥原理 设A和B是分别具有性质P1和P2的 ...

  9. [组合数学] 容斥原理polya定理

    数学 A = 170 物理 B=130 化学C=120 A ∩ B = 45 A ∩ C = 20 B ∩ C = 22 A ∩ B ∩ C = 3 A\cap B = 45\quad A\cap C ...

最新文章

  1. 激光雷达和毫米波雷达
  2. mysql end log pos_MySql binlog日志详解
  3. C++中 auto自动变量,命名空间,using作用以及作用域
  4. 【转】ABP源码分析二:ABP中配置的注册和初始化
  5. 写出好代码系列 工程思维
  6. python编码转换规范_Python转载[编码规范]
  7. java点击上传上传mysql并显示图片_java + mysql + jdbc实现图片上传
  8. ipmi java sdk,IPMI Library for Java
  9. Flash制作空战游戏
  10. html如何让标题居中,HTML怎么把标题居中
  11. SQL 升序、降序排列
  12. Vite:Error: Cannot find module ‘worker_threads‘
  13. 风格迁移!一文读懂StyleGAN进化过程!
  14. 数据结构与算法-普利姆算法(Prim) | 尚硅谷韩顺平
  15. iOS开发调试技巧之在App设置中切换服务器环境
  16. 2.SpringBoot整合Mybatis(一对一)
  17. KEGG pathway 数据库
  18. 用dictionary写火星文翻译器
  19. SuSE Linux Enterprise Server 11布置和琐屑界面截图
  20. 配置虚拟机主机名并建立与本地主机的ip映射关系

热门文章

  1. 深入学习Redis系列文章
  2. 5w对讲机需要执照吗
  3. 软件测试自动化分类,自动化测试的主要分类
  4. 独孤思维:免费软件搬运项目,零成本玩公众号赚零花钱
  5. 用python编写图片生成器_Image to Braille 图片转点阵文本生成器
  6. storm如何部署拓扑
  7. 主板的芯片和插槽介绍
  8. Oracle——武汉空间数据库系统设计
  9. beeline登录配置
  10. 移动App该怎样保存用户password