[SCOI 2007] 排列

Posted evenbao

tags:

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

[题目链接]

         https://www.lydsy.com/JudgeOnline/problem.php?id=1072

[算法]

        状压DP

[代码]

        

#include<bits/stdc++.h>
using namespace std;
#define MAXD 1000
const int MAXS = 2048;

int i,j,k,T,len,d,MASK;
char s[20];
long long f[MAXS][MAXD];
long long ans;
long long fac[15];
int cnt[10];
 
int main()
{
    
    fac[0] = 1;
    for (i = 1; i <= 10; i++) fac[i] = fac[i-1] * i;
    scanf("%d",&T);
    while (T--)
    {
        scanf("%s%d",&s,&d);
        len = strlen(s);
        MASK = (1 << len) - 1;
        memset(f,0,sizeof(f));
        memset(cnt,0,sizeof(cnt));
        for (i = 0; i < len; i++) cnt[s[i] - 0]++;
        f[0][0] = 1;    
        for (i = 0; i <= MASK; i++)
        {
            for (j = 0; j < d; j++)
            {
                for (k = 0; k < len; k++)
                {
                    if ((i & (1 << k)) == 0)
                        f[i | (1 << k)][(j * 10 + s[k] - 0) % d] += f[i][j];
                }
            }
        }
        ans = f[MASK][0];
        for (i = 0; i < 10; i++) ans /= fac[cnt[i]];
        printf("%lld
",ans);
    }
    
    return 0;
}

 

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

P4163 [SCOI2007]排列(状压dp)

[BZOJ1072][SCOI2007]排列perm

bzoj1072SCOI2007排列perm

BZOJ1072: [SCOI2007]排列perm 状压DP

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

[BZOJ1072][SCOI2007]排列perm