题目

看到这个限制条件有点多,我们就一直容斥好了

先容斥颜色,我们枚举至少不用\(i\)种颜色

再容斥列,我们枚举至少不用\(j\)列

最后容斥行,枚举至少不用\(k\)行

容斥系数显然是\((-1)^i,(-1)^j,(-1)^k\),我们从\(c\)种颜色里选出\(i\)种不用,\(m\)列里选出\(j\)列不凃,\(n\)行里选出\(k\)行不凃,分别是\(\binom{c}{i},\binom{m}{j},\binom{n}{k}\)

对于剩下的\((m-j)(n-k)\)个格子,每个格子我们有\(c-i\)种颜色可以涂,或者直接空着,所以有\(c-i+1\)种选择

于是我们的答案就是

\[\sum_{i=0}^c\sum_{j=0}^m\sum_{k=0}^n(-1)^{i+j+k}\binom{c}{i}\binom{m}{j}\binom{n}{k}\times (c-i+1)^{(m-j)(n-k)}
\]

里面用快速幂算那个东西会\(T\)的,我们乱搞一下就能优化成\(O(nmc)\)了

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define re register
#define LL long long
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int mod=1e9+7;
const int maxn=405;
int n,m,c;
int fac[maxn],inv[maxn],ifac[maxn];
inline int C(int n,int m) {
if(m>n) return 0;
return 1ll*fac[n]*ifac[n-m]%mod*ifac[m]%mod;
}
inline int ksm(int a,int b) {
int S=1;
while(b) {if(b&1) S=1ll*S*a%mod;b>>=1;a=1ll*a*a%mod;}
return S;
}
int main() {
n=read(),m=read(),c=read();
inv[1]=1,fac[0]=1,ifac[0]=1;
for(re int i=1;i<=400;i++) fac[i]=1ll*fac[i-1]*i%mod;
for(re int i=2;i<=400;i++) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for(re int i=1;i<=400;i++) ifac[i]=1ll*ifac[i-1]*inv[i]%mod;
int ans=0;
for(re int i=0;i<=c;i++)
for(re int j=0;j<=m;j++) {
int now=1,t=ksm(c-i+1,m-j);
for(re int k=n;k>=0;--k) {
int tot=1ll*C(c,i)*C(m,j)%mod*C(n,k)%mod*now%mod;
if((i+j+k)&1) ans=(ans-tot+mod)%mod;
else ans=(ans+tot)%mod;
now=1ll*now*t%mod;
}
}
printf("%d\n",ans);
return 0;
}

[Jsoi2015]染色问题的更多相关文章

  1. bzoj4487[Jsoi2015]染色问题 容斥+组合

    4487: [Jsoi2015]染色问题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 211  Solved: 127[Submit][Status ...

  2. BZOJ4487 [Jsoi2015]染色问题

    BZOJ4487 [Jsoi2015]染色问题 题目描述 传送门 题目分析 发现三个限制,大力容斥推出式子是\(\sum_{i=0}^{N}\sum_{j=0}^{M}\sum_{k=0}^{C}(- ...

  3. 【BZOJ4487】[JSOI2015]染色问题(容斥)

    [BZOJ4487][JSOI2015]染色问题(容斥) 题面 BZOJ 题解 看起来是一个比较显然的题目? 首先枚举一下至少有多少种颜色没有被用到过,然后考虑用至多\(k\)种颜色染色的方案数. 那 ...

  4. [bzoj4487][Jsoi2015]染色_容斥原理

    染色 bzoj-4487 Jsoi-2015 题目大意:给你一个n*m的方格图,在格子上染色.有c中颜色可以选择,也可以选择不染.求满足条件的方案数,使得:每一行每一列都至少有一个格子被染色,且所有的 ...

  5. 2019.02.09 bzoj4487: [Jsoi2015]染色问题(容斥原理)

    传送门 题意简述: 用ccc中颜色给一个n∗mn*mn∗m的方格染色,每个格子可涂可不涂,问最后每行每列都涂过色且ccc中颜色都出现过的方案数. 思路: 令fi,j,kf_{i,j,k}fi,j,k​ ...

  6. 【题解】JSOI2015染色问题

    好像这个容斥还是明显的.一共有三个要求,可以用组合数先满足一个,再用容斥解决剩下的两个维.(反正这题数据范围这么小,随便乱搞都可以).用 \(a[k][i]\) 表示使用 \(k\) 种颜色,至少有 ...

  7. 【bzoj4487】[Jsoi2015]染色问题 容斥原理

    题目描述 棋盘是一个n×m的矩形,分成n行m列共n*m个小方格.现在萌萌和南南有C种不同颜色的颜料,他们希望把棋盘用这些颜料染色,并满足以下规定: 1.  棋盘的每一个小方格既可以染色(染成C种颜色中 ...

  8. 【BZOJ4487】[JSOI2015] 染色问题(高维容斥)

    点此看题面 大致题意: 有一个\(n*m\)的矩形,先让你用\(C\)种颜色给它染色.每个格子可染色可不染色,但要求每行每列至少有一个小方格被染色,且每种颜色至少出现一次.求方案数. 高维容斥 显然题 ...

  9. [JSOI2015]染色游戏

    Description 棋盘是一个n×m的矩形,分成n行m列共n*m个小方格. 现在萌萌和南南有C种不同颜色的颜料,他们希望把棋盘用这些颜料染色,并满足以下规定: 1.棋盘的每一个小方格既可以染色(染 ...

随机推荐

  1. C# GDI+编程之Graphics类

    GDI+是GDI的后继者,它是.NET Framework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于绘制各种数据图像.数学仿真等. Graphics类是GDI+的核心, ...

  2. MongoDB框架Jongo的使用介绍

    1.Jongo可以用来做什么?   Jongo框架的目的是使在MongoDB中可以直接使用的查询Shell可以直接在Java中使用.在官网首页有一个非常简洁的例子:   SHELL:这种查询方式是Mo ...

  3. K临近算法

    K临近算法原理 K临近算法(K-Nearest Neighbor, KNN)是最简单的监督学习分类算法之一.(有之一吗?) 对于一个应用样本点,K临近算法寻找距它最近的k个训练样本点即K个Neares ...

  4. [BZOJ 4671]异或图

    Description 题库链接 给定 \(s\) 个结点数相同且为 \(n\) 的图 \(G_1\sim G_s\) ,设 \(S = \{G_1, G_2,\cdots , G_s\}\) ,问 ...

  5. VPS杂谈(一)

    1. VPS购买推荐 可参考:http://www.laozuo.org/myvps 2. VPS配置SSH端口号 购买的VPS的主机,一般情况下端口号不是22,被改成了其它的,这个时候为了方便自己的 ...

  6. Groovy学习笔记(1)读取CSV文件

      本篇分享讲展示如何在Groovy中读取CSV文件.   我们要读取的CSV文件foo.csv的内容如下:   Groovy代码如下: //import packages import java.i ...

  7. 怎样删除C/C++代码中的所有注释?浅谈状态机的编程思想

    K&R习题1-23中,要求“编写一个程序,删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不允许嵌套”. 如果不考虑字符常量和字符串常量,问题确实很简单.只 ...

  8. C++ enum的使用

    enum day {Sun,Mon,Tue,Wed,Thu,Fri,Sat};  默认情况下,枚举符的值从0开始,其后值总是前面一个+1.  即Sun=0,Mon=1,Tue=2,Wed=3,Thu= ...

  9. 【Mybatis】一对一实例

    ①创建数据库和表,数据库为mytest,表为father和child DROP TABLE IF EXISTS child; DROP TABLE IF EXISTS father; CREATE T ...

  10. linux学习笔记-软件包的相关知识

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.软件包种类 1.源码包 源码包即提供源代码的发行包 2.二进制包 二进制包即提供二进制文件的发行包 安装方法查找二进制包官网 ...