【bzoj1072】SCOI2007排列

状压dp,f[i][j]表示当前取了i,模数余j的状态。

然后向后推,枚举可能的数即可。

注意每个数存在重复,最后要除以相应出现次数的阶乘。

复制代码
#include<bits/stdc++.h>
using namespace std;
int n,m,a[10],c[10],len,f[1050][1010],ans;
char s[20];
int main(){
    int T;scanf("%d",&T);
    while(T--){
        memset(c,0,sizeof(c));memset(f,0,sizeof(f));
        scanf("%s%d",s,&m);len=strlen(s);f[0][0]=1;
        for(int i=0;i<len;i++)c[s[i]-'0']++,a[i]=s[i]-'0';
        for(int k=0;k<(1<<len);k++)
        for(int i=0;i<len;i++)if(!(k&(1<<i)))
        for(int j=0;j<m;j++)f[k^(1<<i)][((10*j)+a[i])%m]+=f[k][j];
        ans=f[(1<<len)-1][0];
        for(int i=0;i<=9;i++)
        for(int j=2;j<=c[i];j++)ans/=j;
        printf("%d\n",ans);
    }
    return 0;
}
复制代码

 

posted @   zcysky  阅读(198)  评论(0编辑  收藏  举报
编辑推荐:
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
阅读排行:
· 感觉程序员要被 AI 淘汰了?学什么才有机会?
· BotSharp + MCP 三步实现智能体开发
· “你觉得客户需要”是杀死TA的最后一根稻草 | IPD集成产品开发
· dify升级,PostgreSQL数据库字段更新处理
· Java 与 LLM 大模型融合的技术革命:JBoltAI 如何重构企业级 AI 开发范式
点击右上角即可分享
微信分享提示