bzoj1072: [SCOI2007]排列perm

Posted invoid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1072: [SCOI2007]排列perm相关的知识,希望对你有一定的参考价值。

状压dp。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 12;

int f[1<<maxn][1010],cnt[maxn],fac[maxn];
char s[maxn];
int T,d,N,n;

int main() {
    fac[0]=1;
    for(int i=1;i<=10;i++) fac[i]=fac[i-1]*i;
    scanf("%d",&T);
    while(T--) {
        memset(cnt,0,sizeof(cnt));
        scanf("%s%d",s,&d);
        n=strlen(s);
        N=(1<<n)-1;
        for(int i=0;i<n;i++) cnt[s[i]-0]++;
        
        memset(f,0,sizeof(f));
        f[0][0]=1;
        for(int i=0;i<N;i++)
        for(int j=0;j<d;j++) 
            if(f[i][j]) 
            for(int k=0;k<n;k++) if(!((1<<k)&i))
                f[i|(1<<k)][(j*10+(s[k]-0))%d]+=f[i][j];
        int res=f[N][0];
        for(int i=0;i<10;i++) res/=fac[cnt[i]];
        printf("%d\n",res);
    }
    return 0;
}

以上是关于bzoj1072: [SCOI2007]排列perm的主要内容,如果未能解决你的问题,请参考以下文章

[BZOJ1072][SCOI2007]排列perm

BZOJ1072: [SCOI2007]排列perm 状压DP

[BZOJ1072][SCOI2007]排列perm 状压dp

bzoj1072: [SCOI2007]排列perm

bzoj1072: [SCOI2007]排列perm

BZOJ1072: [SCOI2007]排列perm