BZOJ 1004: [HNOI2008]Cards [Polya 生成函数DP]
传送门
题意:三种颜色,规定使用每种颜色次数$r,g,b$,给出一个置换群,求多少种不等价着色
$m \le 60,\ r,g,b \le 20$
咦,规定次数?
《组合数学》上不是有生成函数做法吗....
生成函数貌似可以和背包$DP$互相转换来着
然后就做出来了
每种置换求循环,$d[i][j][k][l]$表示前$i$个循环有了$j$个红$k$个绿$l$个蓝
遇到一点小问题,一直输出$0$
看了黄学长的代码发现他加了一个恒等置换....
想了一会儿才明白题目给的不是置换群,因为少了一个恒等置换.....
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int N=65; typedef long long ll; inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}return x*f; }int n,r,b,g,m,P,a[N]; int f[N],d[N][21][21],w[N],ans; bool vis[N]; inline void mod(int &x){if(x>=P) x-=P;} void dp(){int s=0;memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++) if(!vis[i]){int u=a[i],len=1;while(u!=i) vis[u]=1,len++,u=a[u];w[++s]=len;}memset(d,0,sizeof(d));d[0][0][0]=1;for(int i=1;i<=s;i++)for(int j=r;j>=0;j--)for(int k=g;k>=0;k--)for(int l=b;l>=0;l--){if(j>=w[i]) mod(d[j][k][l]+=d[j-w[i]][k][l]);if(k>=w[i]) mod(d[j][k][l]+=d[j][k-w[i]][l]);if(l>=w[i]) mod(d[j][k][l]+=d[j][k][l-w[i]]);}mod(ans+=d[r][g][b]); } inline int Pow(int a,int b){int re=1;for(;b;b>>=1,a=a*a%P)if(b&1) re=re*a%P;return re; } inline int Inv(int a){return Pow(a,P-2);} int main(){freopen("in","r",stdin);r=read();b=read();g=read();m=read();P=read();n=r+b+g;for(int j=1;j<=m;j++){for(int i=1;i<=n;i++) a[i]=read();dp();}m++;for(int i=1;i<=n;i++) a[i]=i;dp();ans=ans*Inv(m)%P;printf("%d",ans); }
转载于:https://www.cnblogs.com/candy99/p/6479428.html
BZOJ 1004: [HNOI2008]Cards [Polya 生成函数DP]相关推荐
- 置换群burnside引理(bzoj 1004: [HNOI2008]Cards)
置换群: 看半天置换群表示并看不懂QAQ 但顾名思义是置换组成的群 其实不用看懂也行,就拿简单的例子来说吧 有一个序列s = {1, 2, 3, 4, 5, 6} 和一个变换规则t = {2, 3, ...
- bzoj 1004: [HNOI2008]Cards
/**************************************************************Problem: 1004User: lxy8584099Language ...
- 【BZOJ】1004: [HNOI2008]Cards(置换群+polya+burnside)
http://www.lydsy.com/JudgeOnline/problem.php?id=1004 学习了下polya计数和burnside引理,最好的资料就是:<Pólya 计数法的应用 ...
- bzoj 1009: [HNOI2008]GT考试(dp+kmp+矩阵快速幂)
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3932 Solved: 2398 [Submit][Sta ...
- [HNOI2008]Cards
1004: [HNOI2008]Cards Time Limit: 10 Sec Memory Limit: 162 MB [Submit][Status][Discuss] Description ...
- P1446 [HNOI2008]Cards
P1446 [HNOI2008]Cards 题意: 有n张牌,染三种颜色,每种颜色规定数目,给出m种不同的洗牌方法.两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方 ...
- [bzoj1004][HNOI2008]Cards
[bzoj1004][HNOI2008]Cards 标签: 置换 Burnside引理 题目链接 扯淡 题目中说了这样一句话 两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法 ...
- BZOJ 1005: [HNOI2008]明明的烦恼
BZOJ 1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在 任意两点间连线 ...
- bzoj 1010: [HNOI2008]玩具装箱toy(斜率dp)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MB Submit: 10837 Solved: 4513 [Submit] ...
最新文章
- echarts空数据如何设置_拼多多分时折扣如何设置优化?分时数据怎么看?
- JQuery IN ACTION读书笔记之一: JQuery选择器
- 【转载】使用Imaging组件加载GIF动画
- 开课吧java_开课吧javaee企业级开发工程师 十期
- storm基础系列之二----zookeeper的作用
- Jupyter notebook 中使用pip install安装第三方Python包
- 【资源分享】ArcFace Demo [Android]
- Java list.remove( )方法需要注意的地方
- 相机标定的来龙去脉(详解标定原理、畸变矫正原理、使用经验)
- mybatis 新增语句_mybatis增删改查
- 【渝粤教育】电大中专电子商务网站建设与维护_1作业 题库
- Java编写HTTP请求发送XML报文数据
- Bilibili缓存视频在电脑端直接打开方式
- python爬股指期货数据_股指期货高频数据机器学习预测
- 面试必备 | 带你彻底搞懂 Python 生成器。
- Hash算法及数字签名【六】
- PHP Imagick发光文字
- js简单插件(饼形图)
- Python数据分析与可视化(基础知识)
- JS方法/函数重载的姿势