思路:状压dp,f[i][j]表示新的排列的状态为i(也就是新的排列已经选了哪些数),然后模d的余数为j的方案数。

但考虑到可能有些数会出现多次,假设一个数x出现了cnt[x]次,那么对于一个可行的答案,显然也包含cnt[x]个x,那么这样的答案就会被计算多次,因为如果状态i先加入第一个x再加入第二个x和状态i先加入第二个x再加入第一个x显然是算作两种不同的方案,但其实他们是一样的,但对于某一个确定的合法的答案,x的位置不会变,因此如果重复的情况只可能是该答案中所有的x在互换,这种互换会被多次统计但答案其实只有一个,可以发现这种互换的情况数有cnt[x]!种(本质上就是一个长为cnt[x]的排列的情况数),然后答案除以cnt[x]!就可以完成去重了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define maxn 1<<11int cases,p;
int cnt[15],f[maxn][maxn];
char s[15];int main(){scanf("%d",&cases);while (cases--){scanf("%s%d",s,&p);int n=strlen(s);memset(f,0,sizeof(f)),f[0][0]=1,memset(cnt,0,sizeof(cnt));for (int i=0;i<n;i++) cnt[s[i]-'0']++;for (int i=0;i<(1<<n);i++)for (int m=0;m<p;m++)for (int j=0;j<n;j++)if (!(i&(1<<j))) f[i|(1<<j)][(m*10+s[j]-'0')%p]+=f[i][m];int ans=f[(1<<n)-1][0];for (int i=0;i<=9;i++)for (int j=2;j<=cnt[i];j++)ans/=j;printf("%d\n",ans);}return 0;
}

View Code

转载于:https://www.cnblogs.com/DUXT/p/5990741.html

bzoj1072: [SCOI2007]排列perm相关推荐

  1. [BZOJ1072][SCOI2007]排列perm

    [BZOJ1072][SCOI2007]排列perm 试题描述 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有 ...

  2. bzoj 1072: [SCOI2007]排列perm(状压dp)

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2272  Solved: 1432 [Submit][ ...

  3. [BZOJ1072/SCOI2007]排列prem

    Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种. Input ...

  4. BZOJ 1072: [SCOI2007]排列perm [DP 状压 排列组合]

    题意:给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0) 100%的数据满足:s的长度不超过10, 1<=d<=1000, 1<=T<=15 看到整 ...

  5. [BZOJ 1072] 排列perm

    Link: BZOJ 1072 传送门 Solution: 一道直接next_permutation纯暴力就能过的题? 难道2007年时大家都不知道next_permutation这个函数吗 还是用复 ...

  6. 2017.7.27 排列perm 思考记录

    这个题可以通过技巧找思路的. 首先,字符串小于10,那么这肯定是用来状压的. 用来存数肯定不行,能用0.1表示的可以是使用情况 还要满足倍数,所以我们可以存余数 那么就好做了,直接递推dp 还要注意如 ...

  7. 2019.4.summary

    2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...

  8. BZOJ 1072 排列

    1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 128 MB Description 给一个数字串s和正整数d, 统计s有多少种不同的排 ...

  9. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

最新文章

  1. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色配置)实战
  2. 30天敏捷生活(5):形成个人价值观
  3. .Net高级技术——IDisposable
  4. C# 繁体,简体互转
  5. 虚拟专题:知识图谱 | 知识图谱多跳问答推理研究进展、挑战与展望
  6. java addobject_springMVC后台的值无法通过ModelAndView的addObject传到前台
  7. CSS文件的三种引入方式
  8. 设计一个方法输入字符串,字节数,输出截取的字符串
  9. 五个案例“熄灭”Nginx漏洞隐患
  10. verilog教程——initial语句和always语句
  11. 企业微信开发服务端报错汇总(手把手教你企业微信开发五)
  12. 黄海广:那些年做的学术公益——你不是一个人在战斗
  13. 谁再说“游戏没用”,就拿这个回怼他!
  14. iOS 加载本地gif缓慢
  15. 69的人因为穷不谈恋爱,这届年轻人脱单太难了
  16. 手机在线提取视频中的音频方法
  17. 管理学生营养餐很重要
  18. 格式化硬盘出现/dev/sdb2 is apparently in use by the system错误
  19. GSMArena魅族mx四核评测全文|去除英文|
  20. 匈牙利编码_匈牙利信息图形学的开端

热门文章

  1. C# 学习笔记(15)自己的串口助手----波形显示
  2. 概率论与数理统计(二)
  3. 1.6 matlab矩阵的表示
  4. 泥浆配制_朝政泥浆——广西田阳县百东河水库溢洪道穿越钻泥浆配制简述(3)...
  5. 2018第九届蓝桥省赛题目
  6. 跨专业选修C语言看什么书,跨专业考研如何选择?!!!!!
  7. 3号团队-团队任务4:每日例会(2018-12-3)
  8. 机电传动控制第三次作业
  9. 移动端字体单位该使用px还是rem?
  10. 从圆的面积说起 循环小数 PI