P1446-[HNOI2008]Cards【Burnside引理,dp】
正題
題目連結:https://www.luogu.com.cn/problem/P1446
題目大意
三個顏色的一些東西排在一起,給 m m m種置換,求本質不同的染色方案數。
解題思路
B u r n s i d e Burnside Burnside引理:置換集合 G G G時本質不同的序列方案等於 ∑ x ∈ G c ( x ) ∣ G ∣ \frac{\sum_{x\in G}c(x)}{|G|} ∣G∣∑x∈Gc(x), c ( x ) c(x) c(x)表示置換 x x x中的不動點個數。
也就是每個迴圈中的顏色都相同,可以把每個迴圈視為一個物品,然後放入容量為 r , g , b r,g,b r,g,b的揹包裡的方案數,求解即可。
時間複雜度 O ( r ∗ g ∗ b ∗ m ) O(r*g*b*m) O(r∗g∗b∗m)
c o d e code code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll r,b,g,m,p,n,tot,ans;
ll siz[81],f[21][21][21],y[81];
bool v[81];
ll power(ll x,ll b){
ll ans=1;
while(b){
if(b&1)ans=ans*x%p;
x=x*x%p;b>>=1;
}
return ans;
}
ll solve(){
memset(f,0,sizeof(f));
memset(v,0,sizeof(v));
tot=0;
for(ll i=1;i<=n;i++){
if(v[i])continue;
siz[++tot]=0;ll x=i;
while(!v[x]){
siz[tot]++;
v[x]=1;x=y[x];
}
}
f[0][0][0]=1;
for(ll x=1;x<=tot;x++)
for(ll i=r;i>=0;i--)
for(ll j=g;j>=0;j--)
for(ll k=b;k>=0;k--){
if(i>=siz[x])(f[i][j][k]+=f[i-siz[x]][j][k])%=p;
if(j>=siz[x])(f[i][j][k]+=f[i][j-siz[x]][k])%=p;
if(k>=siz[x])(f[i][j][k]+=f[i][j][k-siz[x]])%=p;
}
return f[r][g][b];
}
int main()
{
scanf("%lld%lld%lld%lld%lld",&r,&g,&b,&m,&p);
n=r+b+g;
for(ll i=1;i<=n;i++)y[i]=i;
ans=solve();
for(ll i=1;i<=m;i++){
for(ll j=1;j<=n;j++)
scanf("%lld",&y[j]);
(ans+=solve())%=p;
}
printf("%lld\n",ans*power(m+1,p-2)%p);
return 0;
}
相關文章
- LGV引理
- BZOJ 1010 [HNOI2008]玩具裝箱toy:斜率優化dp優化
- 洛谷P3193 [HNOI2008]GT考試(dp 矩陣乘法)矩陣
- 洛谷P3195 [HNOI2008]玩具裝箱TOY(單調佇列優化DP)佇列優化
- MySQL索引理解和應用MySql索引
- POJ 1511-Invitation Cards(SPFA)
- 密碼學之PRP/PRF轉換引理密碼學
- 【Lintcode】1728. X of a Kind in a Deck of Cards
- CARDS主題 & 導航欄樣式修改
- Throwing cards away I(queue迴圈佇列)佇列
- 【DP】區間DP入門
- LeetCode之Reveal Cards In Increasing Order(Kotlin)LeetCodeKotlin
- POJ 1511 Invitation Cards(最短路spfa演算法)演算法
- Codeforces Round #235 (Div. 2) A. Vanya and Cards
- bzoj 3864: Hero meet devil [dp套dp]dev
- 序列 DP
- DP動態規劃-爬塔(雙層dp)動態規劃
- 區間dp
- 狀壓 dp
- 揹包DP
- 狀壓DP
- 換根dp
- SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式公式
- 插頭dp初探
- DP rman backup scripts
- [dp 小計] SOSdp
- Codeforces 372B Counting Rectangles is Fun:dp套dp
- POJ1511 Invitation Cards【Dijkstra+堆優化+前向星】優化
- 「管理數學基礎」3.1 凸分析:凸集與凸集分離定理、Farkas引理
- BZOJ 1008 [HNOI2008]越獄 (組合數 簡單公式)公式
- 【DP】斜率優化初步優化
- 動態規劃(DP)動態規劃
- 【數位dp】學習
- ubuntu for DP tools installUbuntu
- 概率DP入門題
- 【DP】編輯距離
- [筆記]樹形dp筆記
- 【DP】最大正方形