码迷,mamicode.com
首页 > 其他好文 > 详细

HNOI 2008--Cards( 置换群 & DP )

时间:2017-09-18 17:29:38      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:php   sage   --   i++   card   print   space   链接   log   

        对群论没有任何了解的自觉百度。。。

题目链接:

        http://www.lydsy.com/JudgeOnline/problem.php?id=1003 

Solution

        请百度“ 伯恩赛德引理 ”。。。

        这是一道置换群的题目。。。虽然还要加上DP。。。

        如果明白伯恩赛德引理的话。。直接套公式即可。。。

代码

#include<cstdio>
#include<iostream>
#include<cstring>
#define LL long long
using namespace std;
int sr,sb,sg,m,n,mod,ans;
int f[70][70][70],g[70],d[70];
bool c[70];
int DP(){
    for(int i=1;i<=n;i++) c[i]=0;
    int sum=0,q;
    for(int i=1;i<=n;i++)
        if(!c[i]){
            d[++sum]=0;q=i;
            while(!c[g[q]]){
                d[sum]++;
                q=g[q];
                c[q]=1;
            }
        }
    for(int i=0;i<=sr;i++)
        for(int j=0;j<=sb;j++)
            for(int k=0;k<=sg;k++)
                f[i][j][k]=0;
    f[0][0][0]=1;
    for(int h=1;h<=sum;h++)
        for(int i=sr;i>=0;i--)
            for(int j=sb;j>=0;j--)
                for(int k=sg;k>=0;k--){
                    if(i>=d[h]) f[i][j][k]=(f[i][j][k]+f[i-d[h]][j][k])%mod;
                    if(j>=d[h]) f[i][j][k]=(f[i][j][k]+f[i][j-d[h]][k])%mod;
                    if(k>=d[h]) f[i][j][k]=(f[i][j][k]+f[i][j][k-d[h]])%mod;
                }
    return f[sr][sb][sg];
}
int pow(int a,int b){
    int s=1;
    while(b){
        if(b&1) s=s*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    return s;
}
int main(){
    ans=0;
    scanf("%d%d%d%d%d",&sr,&sb,&sg,&m,&mod);
    f[0][0][0]=1;
    n=sr+sb+sg;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++)
            scanf("%d",&g[j]);
        ans=(ans+DP())%mod;
    }
    for(int i=1;i<=n;i++) g[i]=i;
    ans=(ans+DP())%mod;
    m++;
    ans=ans*pow(m,mod-2)%mod;
    printf("%d\n",ans);
    return 0;
}

 

This passage is made by Yukino.

HNOI 2008--Cards( 置换群 & DP )

标签:php   sage   --   i++   card   print   space   链接   log   

原文地址:http://www.cnblogs.com/Yuigahama/p/7543644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!