BZOJ1004: [HNOI2008]Cards
三维01背包算出在每一个置换下不变的染色方案数,Burnside引理计算答案。
PS:数据太水所以只算恒等置换也是可以过的。
#include<bits/stdc++.h>
using namespace std;
int n,m,p,x,y,z;
bool u[61];
int f[21][21][21],s[61],v[61];
int power(int u,int v){
int d=1;
for(;v;v>>=1){
if(v&1)
d=d*u%p;
u=u*u%p;
}
return d;
}
void add(int& u,int v){
u=(u+v)%p;
}
int main(){
scanf("%d%d%d%d%d",&x,&y,&z,&m,&p);
n=x+y+z;
int ans=1;
for(int i=1;i<=n;++i)
ans=ans*i%p;
for(int i=1;i<=x;++i)
ans=ans*power(i,p-2)%p;
for(int i=1;i<=y;++i)
ans=ans*power(i,p-2)%p;
for(int i=1;i<=z;++i)
ans=ans*power(i,p-2)%p;
for(int t=0;t!=m;++t){
for(int i=1;i<=n;++i)
scanf("%d",s+i);
memset(u,0,sizeof u);
int cnt=0;
for(int i=1;i<=n;++i)
if(!u[i]){
int k=u[i]=1;
for(int j=s[i];j!=i;j=s[j])
k+=u[j]=1;
v[cnt++]=k;
}
memset(f,0,sizeof f);
f[0][0][0]=1;
for(int a=0;a!=cnt;++a)
for(int i=x;~i;--i)
for(int j=y;~j;--j)
for(int k=z;~k;--k){
if(i>=v[a])
add(f[i][j][k],f[i-v[a]][j][k]);
if(j>=v[a])
add(f[i][j][k],f[i][j-v[a]][k]);
if(k>=v[a])
add(f[i][j][k],f[i][j][k-v[a]]);
}
add(ans,f[x][y][z]);
}
printf("%d\n",ans*power(m+1,p-2)%p);
}
BZOJ1004: [HNOI2008]Cards的更多相关文章
- bzoj1004 [HNOI2008]Cards 置换群+背包
[bzoj1004][HNOI2008]Cards 2014年5月26日5,3502 Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿 ...
- [BZOJ1004] [HNOI2008]Cards解题报告(Burnside引理)
Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红 ...
- BZOJ1004 [HNOI2008]Cards 【burnside定理 + 01背包】
题目链接 BZOJ1004 题解 burnside定理 在\(m\)个置换下本质不同的染色方案数,等于每种置换下不变的方案数的平均数 记\(L\)为本质不同的染色方案数,\(m\)为置换数,\(f(i ...
- BZOJ1004 [HNOI2008]Cards(Polya计数)
枚举每个置换,求在每个置换下着色不变的方法数,先求出每个循环的大小,再动态规划求得使用给定的颜色时对应的方法数. dp[i][j][k]表示处理到当前圈时R,B,G使用量为i,j,k时的方法数,背包思 ...
- [BZOJ1004] [HNOI2008] Cards (Polya定理)
Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红 ...
- BZOJ1004 HNOI2008 Cards Burnside、背包
传送门 在没做这道题之前天真的我以为\(Polya\)可以完全替代\(Burnside\) 考虑\(Burnside\)引理,它要求的是对于置换群中的每一种置换的不动点的数量. 既然是不动点,那么对于 ...
- BZOJ1004[HNOI2008]Cards——polya定理+背包
题目描述 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红色,Sb张蓝色 ...
- bzoj1004: [HNOI2008]Cards(burnside引理+DP)
题目大意:3种颜色,每种染si个,有m个置换,求所有本质不同的染色方案数. 置换群的burnside引理,还有个Pólya过几天再看看... burnside引理:有m个置换k种颜色,所有本质不同的染 ...
- bzoj1004 [HNOI2008]Cards Burnside定理+背包
题目传送门 思路:首先是Burnside引理,要先学会这个博客. Burnside引理我们总结一下,就是 每种置换下不动点的数量之和除以置换的总数,得到染色方案的数量. 这道题,显然每种 ...
随机推荐
- [POJ2104]K-th Number
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 34048 Accepted: 10810 Ca ...
- jsp还是html+ajax
1.有人说JSP会泄露源码(可能会有一些代码痕迹,但肯定没啥大事)2.又说,Ajax是为了分离前后台,让控制部分在前台处理,降低代码耦合度,后台只相当于服务. 3.能够让前台移植,降低后期维护成本.纯 ...
- 1-mkdir 命令总结
mkdir make directories 创建目录 [语法]: ls [选项] [参数] [功能介绍] mkdir命令用来创建目录.该命令创建由dirname命名的目录.如果在目录名的前面没有加任 ...
- springMvc请求的跳转和传值
forword跳转页面的三种方式: 1.使用serlvet /** * 使用forward跳转,传递基本类型参数到页面 * 注意: * 1.使用servlet原生API Request作用域 * */ ...
- ajax+FormData+javascript实现无刷新表单信息提交
ajax+FormData+javascript实现无刷新表单信息提交 原理: dom收集表单信息,利用FormData快速收集表单信息 ,实例化表单数据对象 同时收集fm的表单域信息. var f ...
- 开发错误记录10: Butterknife8.1.0 提示NullPointerException空指针
Butterknife 8.0以后的版本在引入到项目中有变动,按之前的引入方式之后, 会报 空指针! 正确的引入方法是:(在官方的文件上有说明的,记录是为了方便下次引入,直接复制到项目) 在项目的.g ...
- Ubuntu里的若干问题解决方案
1. Ubuntu里出现两个屏幕,并且其中一个是“未知显示器”,无法去除时,可以尝试使用该命令:sudo apt-get install bumblebee-nvidia 2.虚拟机上Ubuntu开机 ...
- [Elasticsearch] 全文搜索 (一) 基础概念和match查询
全文搜索(Full Text Search) 现在我们已经讨论了搜索结构化数据的一些简单用例,是时候开始探索全文搜索了 - 如何在全文字段中搜索来找到最相关的文档. 对于全文搜索而言,最重要的两个方面 ...
- git rebase 和 reset的区别
check the command detail by input 'git command --help' rebase: reset:
- Node.js的net模块
net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法 创建TCP服务器 net.createServer方法 创建客户端去连接服务器 net.connect方法 简 ...