洛谷P1446 [HNOI2008]Cards
置换群+dp
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
#define MAXN 65
#define ll long long
#define pb push_back
#define ft first
#define sc second
#define mp make_pair
using namespace std;
int Inv(int a,int p){
int b=p-;
int ret=;
while(b){
if(b&){
ret=1LL*ret*a%p;
}
a=1LL*a*a%p;
b>>=;
}
return ret;
}
int sr,sb,sg,n,m,MOD;
int a[MAXN][MAXN];
int f[][][];
int b[MAXN],d[MAXN];
int calc(int x){
memset(b,,sizeof(b));
memset(d,,sizeof(d));
int cnt=;
for(int i=;i<=n;i++){
if(!b[i]){
cnt++;
for(int j=i;!b[j];j=a[x][j]){
d[cnt]++;
b[j]=;
}
}
}
memset(f,,sizeof(f));
f[][][]=;
for(int h=;h<=cnt;h++){
for(int i=sr;i>=;i--){
for(int j=sb;j>=;j--){
for(int k=sg;k>=;k--){
if(i>=d[h])(f[i][j][k]+=f[i-d[h]][j][k])%=MOD;
if(j>=d[h])(f[i][j][k]+=f[i][j-d[h]][k])%=MOD;
if(k>=d[h])(f[i][j][k]+=f[i][j][k-d[h]])%=MOD;
}
}
}
}
return f[sr][sb][sg];
}
int main()
{
// freopen("data.in","r",stdin);
scanf("%d%d%d%d%d",&sr,&sb,&sg,&m,&MOD);
n=sr+sb+sg;
int t;
for(int i=;i<=m;i++){
for(int j=;j<=n;j++){
scanf("%d",&t);
a[i][t]=j;
}
}
m++;
for(int i=;i<=n;i++)a[m][i]=i;
int ans=;
for(int i=;i<=m;i++){
ans+=calc(i);
ans%=MOD;
}
ans=1LL*ans*Inv(m,MOD)%MOD;
printf("%d\n",ans);
return ;
}
洛谷P1446 [HNOI2008]Cards的更多相关文章
- 洛谷 P1446 [HNOI2008]Cards 解题报告
P1446 [HNOI2008]Cards 题目描述 小春现在很清闲,面对书桌上的\(N\)张牌,他决定给每张染色,目前小春只有\(3\)种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun ...
- 洛谷P1446/BZOJ1004 Cards Burnside引理+01背包
题意:有n张牌,有R+G+B=n的3种颜色及其数量,要求用这三种颜色去染n张牌.n张牌有m中洗牌方式,问在不同洗牌方式下本质相同的染色方案数. 解法:这道题非常有意思,题解参考Hzwer学长的.我这里 ...
- luogu P1446 [HNOI2008]Cards
题目链接 luogu P1446 [HNOI2008]Cards 题解 题意就是求染色方案->等价类 洗牌方式构成成了一个置换群 然而,染色数限制不能用polay定理直接求解 考虑burnsid ...
- 斜率优化dp学习笔记 洛谷P3915[HNOI2008]玩具装箱toy
本文为原创??? 作者写这篇文章的时候刚刚初一毕业…… 如有错误请各位大佬指正 从例题入手 洛谷P3915[HNOI2008]玩具装箱toy Step0:读题 Q:暴力? 如果您学习过dp 不难推出d ...
- 洛谷 P3195 [HNOI2008] 玩具装箱
链接: P3195 题意: 给出 \(n\) 个物品及其权值 \(c\),连续的物品可以放进一个容器,如果将 \(i\sim j\) 的物品放进一个容器,产生的费用是 \(\left(j-i+\sum ...
- 洛谷 P6031 - CF1278F Cards 加强版(推式子+递推)
洛谷题面传送门 u1s1 这个推式子其实挺套路的吧,可惜有一步没推出来看了题解 \[\begin{aligned} res&=\sum\limits_{i=0}^ni^k\dbinom{n}{ ...
- 洛谷 P3197 [HNOI2008]越狱 解题报告
P3197 [HNOI2008]越狱 题目描述 监狱有连续编号为\(1-N\)的\(N\)个房间,每个房间关押一个犯人,有\(M\)种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可 ...
- 洛谷 P3197 [HNOI2008]越狱 题解
P3197 [HNOI2008]越狱 题目描述 监狱有连续编号为 \(1-N\) 的 \(N\) 个房间,每个房间关押一个犯人,有 \(M\) 种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗 ...
- luogu P1446 [HNOI2008]Cards burnside引理 置换 不动点
LINK:Cards 不太会burnside引理 而这道题则是一个应用. 首先 一个非常舒服的地方是这道题给出了m个本质不同的置换 然后带上单位置换就是m+1个置换. burnside引理: 其中D( ...
随机推荐
- C语言第三次博客作业—循环结构
一.PTA实验作业 题目1 1.实验代码 int N,i; //N为用户数 char sex; //sex表示性别 double High; //Hight表示身高 scanf("%d&qu ...
- Python实现栈
栈的操作 Stack() 创建一个新的空栈 push(item) 添加一个新的元素item到栈顶 pop() 弹出栈顶元素 peek() 返回栈顶元素 is_empty() 判断栈是否为空 size( ...
- 201421123042 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...
- 服务器磁盘阵列数据恢复,raid5两块硬盘掉线数据恢复方法
[用户单位信息] 农业科学研究院某研究所 [磁盘阵列故障发生过程描述]客户的DELL MD1000服务器内置15块1TB硬盘搭建为RAID5磁盘阵列阵列,服务器在正常工作中有一块硬盘离线,管理员对磁盘 ...
- var、let、const区别
1.let不存在变量提升,必须升明后才可用. 'use strict'; (function(){ console.log(varTest); console.log(letTest); var va ...
- phpadmin增加使得项目能连接数据库
感谢:http://jingyan.baidu.com/article/e4511cf332b9832b845eaf27.html 值得注意: 1.phpadmin的目录:D:\developsoft ...
- Linux CentOS7.0 (02)修改主机名和ip地址
一.主机名修改 1.查看命令 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty). "静态"主机名也称为内核主机名 ...
- 新概念英语(1-53)An interesting climate
新概念英语(1-53)An interesting climate What's the favourite subject of conversation in England? A:Where ...
- 新概念英语(1-49)At the butcher's
新概念英语(1-49)At the butcher's What does Mr. Bird like? A:Do you want any meat today, Mrs. Bird? B:Yes, ...
- MySql入门(2-2)创建数据库
mysql -u root -p; show databases; create database apigateway; use apigateway; show tables;