bzoj4487[Jsoi2015]染色问题 容斥+组合
4487: [Jsoi2015]染色问题
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 211 Solved: 127
[Submit][Status][Discuss]
Description
棋盘是一个n×m的矩形,分成n行m列共n*m个小方格。现在萌萌和南南有C种不同颜色的颜料,他们希望把棋盘用这些颜料染色,并满足以下规定:
1. 棋盘的每一个小方格既可以染色(染成C种颜色中的一种) ,也可以不染色。
2. 棋盘的每一行至少有一个小方格被染色。
3. 棋盘的每一列至少有一个小方格被染色。
4. 种颜色都在棋盘上出现至少一次。
以下是一些将3×3棋盘染成C = 3种颜色(红、黄、蓝)的例子:
.png)
请你求出满足要求的不同的染色方案总数。只要存在一个位置的颜色不同,
即认为两个染色方案是不同的
Input
输入只有一行 3 个整数n,m,c。1 < = n,m,c < = 400
Output
输出一个整数,为不同染色方案总数。因为总数可能很大,只需输出总数
mod 1,000,000,007的值。
Sample Input
2 2 3
Sample Output
60
HINT
Source
由一维容斥推到三维容斥。。
很诡异,并不是很懂,感性理解
枚举ijk,表示占据i行j列k个颜色或不涂色任意选
容斥就好了。
这样推出式子是O(N^3),根据二项式定理可以优化至O(N^2*log2(M))
看blog
http://blog.csdn.net/nirobc/article/details/51064832
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 403
#define p 1000000007
#define LL long long
using namespace std;
int n,m,c;
LL C[N][N];
LL quickpow(int num,int x)
{
LL ans=,base=num;
while (x) {
if (x&) ans=ans*base%p;
x>>=;
base=base*base%p;
}
return ans;
}
int main()
{
scanf("%d%d%d",&n,&m,&c);
for (int i=;i<=;i++) C[i][]=;
for (int i=;i<=;i++)
for (int j=;j<=i;j++)
C[i][j]=(C[i-][j]+C[i-][j-])%p;
LL ans=;
for (int k=;k<=c;k++) {
LL x=;
for (int i=n;i>=;i--){
LL tot=;
for (int j=m;j>=;j--) {
int t=i+j+k;
LL now=C[n][i]*C[m][j]%p*C[c][k]%p*tot%p;
if (t&) ans-=now;
else ans+=now;
tot=tot*x%p;
}
x=x*(c-k+)%p;
ans%=p;
}
}
printf("%lld\n",(ans%p+p)%p);
}
bzoj4487[Jsoi2015]染色问题 容斥+组合的更多相关文章
- [BZOJ4487][JSOI2015]染色问题(容斥)
一开始写了7个DP方程,然后意识到这种DP应该都会有一个通式. 三个条件:有色行数为n,有色列数为m,颜色数p,三维容斥原理仍然成立. 于是就是求:$\sum_{i=0}^{n}\sum_{j=0}^ ...
- BZOJ4487 [Jsoi2015]染色问题
BZOJ4487 [Jsoi2015]染色问题 题目描述 传送门 题目分析 发现三个限制,大力容斥推出式子是\(\sum_{i=0}^{N}\sum_{j=0}^{M}\sum_{k=0}^{C}(- ...
- 【题解】[HAOI2018]染色(NTT+容斥/二项式反演)
[题解][HAOI2018]染色(NTT+容斥/二项式反演) 可以直接写出式子: \[ f(x)={m \choose x}n!{(\dfrac 1 {(Sx)!})}^x(m-x)^{n-Sx}\d ...
- LOJ.6160.[美团CodeM初赛 RoundA]二分图染色(容斥 组合)
题目链接 \(Description\) 求在\(2n\)个点的完全二分图(两边各有\(n\)个点)上确定两组匹配,使得两个匹配没有交集的方案数. \(n\leq10^7\). \(Solution\ ...
- [bzoj4487][Jsoi2015]染色_容斥原理
染色 bzoj-4487 Jsoi-2015 题目大意:给你一个n*m的方格图,在格子上染色.有c中颜色可以选择,也可以选择不染.求满足条件的方案数,使得:每一行每一列都至少有一个格子被染色,且所有的 ...
- bzoj4767两双手 容斥+组合
4767: 两双手 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 684 Solved: 208[Submit][Status][Discuss] ...
- 2019.02.09 bzoj4487: [Jsoi2015]染色问题(容斥原理)
传送门 题意简述: 用ccc中颜色给一个n∗mn*mn∗m的方格染色,每个格子可涂可不涂,问最后每行每列都涂过色且ccc中颜色都出现过的方案数. 思路: 令fi,j,kf_{i,j,k}fi,j,k ...
- [acmm week12]染色(容斥定理+组合数+逆元)
1003 染色 Time Limit: 1sec Memory Limit:256MB Description 今天离散数学课学了有关树的知识,god_v是个喜欢画画的人,所以他 ...
- BZOJ4487 JSOI2015染色问题(组合数学+容斥原理)
逐个去除限制.第四个限制显然可以容斥,即染恰好c种颜色的方案数=染至多c种颜色的方案数-染至多c-1种颜色的方案数+染至多c-2种颜色的方案数…… 然后是限制二.同样可以容斥,即恰好选n行的方案数=至 ...
随机推荐
- Raid5两块硬盘掉线可以恢复数据吗_raid数据恢复案例分享
本案例中发生故障的存储类型是HP P2000,虚拟化平台为vmware exsi,共有10块硬盘组成raid5(硬盘容量为1t,其中6号盘是热备盘),由于某些故障导致阵列中两块硬盘亮黄灯掉线,硬盘无法 ...
- 数据结构与算法 —— 链表linked list(01)
链表(维基百科) 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按顺序存储, ...
- c# aynsc 和 await
static void Main(string[] args) { Print(); Console.WriteLine("这是主线程"); } public static a ...
- sublimeText3 中配置sass环境,并将编译后文件保存到指定文件夹
sass基于ruby引擎,所以安装时ass.compass之前需要安装ruby.具体的链接应该是(http://rubyinstaller.org/downloads).下载并安装相应的版本,勾选第二 ...
- Python内置函数(44)——len
英文文档: len(s) Return the length (the number of items) of an object. The argument may be a sequence (s ...
- eclipse怎么停止building workspace
Eclipse 一直不停 building workspace完美解决总结 一.产生这个问题的原因多种 1.自动升级 2.未正确关闭 3.maven下载lib挂起 等.. 二.解决总结 (1).解决方 ...
- HTTP协议扫盲(七)请求报文之 GET、POST-FORM 和 POST-FILE
一.get 1.页面代码 2.请求报文 3.小结 get请求没有报文体,所以请求报文没有content-type url上的query参数param11=val11¶m12=val12 ...
- ELK学习总结(3-3)elk的组合查询
1.bool 查询: must: 必须 should: 可以满足,也可以不满足. must_not: minimum_should_match: 至少要x个匹配才算匹配成功 disable_coor ...
- Linux将端口设置进防火墙的白名单
1.先检查linux服务器的端口是否被防火墙拦住 `telnet 172.168.1.101 8080后面跟端口号,如果连接上证明是防火墙白名单.如果没有配置 vi /etc/sysconfig/ip ...
- notepad++运行Python
1.打开notepad++的菜单栏,点击run 2.输入cmd /k python "$(FULL_CURRENT_PATH)" & PAUSE & EXIT 3. ...