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

数字串最多只有10位,所以考虑用状压;

压缩的状态是哪些数字被用过,这样可以从一种状态加一个数字转移到另一种状态;

求能整除一个数的个数,那么当然记录当前状态下mod该数的余数,则在一种状态末尾加上另一个数时,这一维的转移就可以方便地表示;

然而因为把每个数看做是不同的,所以这样对于重复出现的数则计算了多次:

比如有两个1,则所有排列中这两个1都会交换位置被算两遍,所以最终答案要/2;

也就是这么多个数的全排列,它的阶乘,所以最后答案要除以所有这些阶乘来去重;

注意循环的内外层关系。

这位的博客写得颇为详细:https://blog.csdn.net/wzq_qwq/article/details/46366399

代码如下:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int t,d,a[],f[][],up,s[];
int jc[]={,,,,,,,,,,};
char dc[];
int main()
{
scanf("%d",&t);
while(t--)
{
memset(s,,sizeof s);
memset(f,,sizeof f);
cin>>dc;
int ln=strlen(dc);
for(int i=;i<=ln;i++)
{
a[i]=dc[i-]-'';
s[a[i]]++;
}
scanf("%d",&d);
up=(<<ln)-;
f[][]=;
for(int j=;j<=up;j++)//顺序
for(int l=;l<d;l++)
{
if(!f[j][l])continue;//剪枝
for(int i=;i<=ln;i++)
if((j&(<<(i-)))==)
{
int k=j|(<<(i-));
f[k][(l*+a[i])%d]+=f[j][l];
}
}
for(int i=;i<=;i++)
if(s[i])f[up][]/=jc[s[i]];
printf("%d\n",f[up][]);
}
return ;
}

bzoj1072Perm——状压DP的更多相关文章

  1. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  2. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  3. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  4. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  5. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  6. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

  7. HDU 1074 Doing Homework (状压dp)

    题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...

  8. 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP

    [BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...

  9. 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP

    [BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...

随机推荐

  1. G1垃圾收集或者Java中垃圾收集的名词收集

    HotSpot WTF,热壶?我他奶奶的还热火呢,Heat,you know? 总之HotSpot是一种遵循java虚拟机规范的一种实现啦,当时并不是Sun公司搞出来的,而是另外一家公司,后来被Sun ...

  2. HDFS源码分析之UnderReplicatedBlocks(二)

    UnderReplicatedBlocks还提供了一个数据块迭代器BlockIterator,用于遍历其中的数据块.它是UnderReplicatedBlocks的内部类,有三个成员变量,如下: // ...

  3. HDFS源码分析之EditLogTailer

    在FSNamesystem中,有这么一个成员变量,定义如下: /** * Used when this NN is in standby state to read from the shared e ...

  4. 讲真,你是因为什么才买华为P20系列手机!

    华为P20系列手机上市两个半月发货600万台!600万台?!看到这个亮瞎我钛合金狗眼的数据,且容我掰着手指脚趾算一下,算了,还是容我毫不夸张的感叹一句吧:华为做手机不用桨,不需风,全靠“浪”……. 两 ...

  5. pycharm 5 注册码

    BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  6. 【BZOJ4281】[ONTAK2015]Związek Harcerstwa Bajtockiego LCA

    [BZOJ4281][ONTAK2015]Związek Harcerstwa Bajtockiego Description 给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点.之后 ...

  7. 配置springMVC时出现的问题

    配置springMVC时出现的问题 项目结构如图:

  8. toitorsegit and toitorstsvn文件夹icon冲突不显示

    Go to HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer Add a new string value & ...

  9. Django项目高频使用文件

    数据库配置: MySQL数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost' ...

  10. (转)JavaScript中==和===的区别

    ==   用于比较   判断 两者相等      ==在比较的时候可以转自动换数据类型 ===用于严格比较   判断两者严格相等     ===严格比较,不会进行自动转换,要求进行比较的操作数必须类型 ...