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

[SCOI 2007] 排列

时间:2018-07-20 19:32:53      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:sizeof   get   scan   www   www.   nbsp   com   \n   return   

[题目链接]

         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\n",ans);
    }
    
    return 0;
}

 

[SCOI 2007] 排列

标签:sizeof   get   scan   www   www.   nbsp   com   \n   return   

原文地址:https://www.cnblogs.com/evenbao/p/9343189.html

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