1072: [SCOI2007]排列perm

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 2272  Solved: 1432
[Submit][Status][Discuss]

Description

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

Input

  输入第一行是一个整数T,表示测试数据的个数,以下每行一组s和d,中间用空格隔开。s保证只包含数字0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Output

  每个数据仅一行,表示能被d整除的排列的个数。

Sample Input

7
000 1
001 1
1234567890 1
123434 2
1234 7
12345 17
12345678 29

Sample Output

1
3
3628800
90
3
6
1398

n这么小,直接状压dp

dp[i][j]表示状态为i( i的二进制表示当前已经使用了串中的某些对应二进制位=1的数),对d取模为j有多少情况

最后答案就是dp[(1<<n)-1][0]

转移:dp[i|(1<<k)][(j*10+a[k+1])%d] += dp[i][j];  (i&(1<<k)==0)

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char str[15];
int a[15], cnt[15], dp[1055][1055];
int main(void)
{int d, T, i, j, k, n, ans;scanf("%d", &T);while(T--){memset(cnt, 0, sizeof(cnt));memset(dp, 0, sizeof(dp));scanf("%s%d", str+1, &d);n = strlen(str+1);for(i=1;i<=n;i++){a[i] = str[i]-'0';cnt[a[i]]++;}dp[0][0] = 1;for(i=0;i<(1<<n);i++){for(j=0;j<d;j++){for(k=0;k<n;k++){if(i&(1<<k))continue;dp[i|(1<<k)][(j*10+a[k+1])%d] += dp[i][j];}}}ans = dp[(1<<n)-1][0];for(i=0;i<=9;i++){for(j=1;j<=cnt[i];j++)ans /= j;}printf("%d\n", ans);}return 0;
}

bzoj 1072: [SCOI2007]排列perm(状压dp)相关推荐

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

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

  2. BZOJ.3058.四叶草魔杖(Kruskal 状压DP)

    题目链接 \(2^{16}=65536\),可以想到状压DP.但是又有\(\sum A_i\neq 0\)的问题.. 但是\(2^n\)这么小,完全可以枚举所有子集找到\(\sum A_i=0\)的, ...

  3. Leetcode 526.优美的排列 二进制状压DP

    题目链接:传送门 假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数 ...

  4. BZOJ 3870: Our happy ending( 状压dp )

    dp(i, s)表示考虑了前i个数后, 能取到的数的集合为s时的方案数.对于1~min(L, K)枚举更新, 剩下的直接乘就好了. 复杂度O(T*K*2^N)...好像有点大, 但是可以AC.... ...

  5. bzoj 3055礼物运送 floyed + 状压DP

    bzoj 3055: 礼物运送 floyed first 设f[i][S]表示取到了S集合中的所有点(不一定是经过的所有点),最后停在了i的最优值. 初始就f[i][{i}] = dis[1][i] ...

  6. bzoj 2560: 串珠子【状压dp】

    正难则反,设g[s]为集合s不一定联通的方案数,这个很好求,把边数+1乘起来即可,f[s]为s一定联通的方案数 f考虑容斥,就是g[s]-Σf[nw]*g[s^nw],nw是s的子集,这样就减掉了不联 ...

  7. 【bzoj 2073】PRZ(状压DP)

    传送门biu~ 把当前过去了哪些人进行状态压缩,枚举当前状态走的最后一批人来转移. #include<bits/stdc++.h> #define inf 0x3f3f3f3f #defi ...

  8. BZOJ 4042 Luogu P4757 [CERC2014]Parades (树形DP、状压DP)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4042 (Luogu) https://www.luogu.org/prob ...

  9. BZOJ 4416: [Shoi2013]阶乘字符串【状压DP

    --不那么裸的状压dp-- 当字符集大于21的时候直接输出不满足--原因啊----大了就跑不过了  --大概就是不能得到嘛[大佬们并没有讨论出结果在下只是听的题解[x 用f[i][j]表示第i个字符前 ...

最新文章

  1. 备案网站管理系统是JSP做的
  2. 高斯-赛德尔迭代法简介
  3. docker 僵尸进程解决方案 Baseimage-docker,胖容器和“容器也是虚拟机”
  4. sudo及其配置文件sudoers
  5. 对于数字特征的若干理解
  6. uploadify php处理程序,uploadify 后台处理
  7. 深入理解 Objective-C:方法缓存
  8. php getdefaultvalue,PHP ReflectionParameter getDefaultValueConstantName()用法及代码示例
  9. Python configparser模块操作代码实例
  10. 靠谱测试人员需具备宏观把控能力
  11. 服务器Windows 2008 R2 安装SQL 2008 R2
  12. android 小学课程,小学课堂(小学学习软件)
  13. python中@staticmethod_Python中的 @staticmethod@classmethod方法
  14. E20170603-ts
  15. .net 5和.net core_开源仿真器 EpicSim 运行 SM3_core
  16. 2022年最新宁夏机动车签字授权人模拟试题及答案
  17. springboot整合J2cache简单使用
  18. 8年SQL,我换了5次职业方向
  19. java实现socket长连接_java如何实现Socket的长连接和短连接
  20. Mac VM 虚拟机固定IP

热门文章

  1. python经典实例-终于明了python入门经典实例
  2. 零基础python入门-零基础 Python 入门
  3. 此次边路调整系统推荐射手走哪路_王者荣耀:廉颇“史诗级”改动,成吉思汗等射手降温!...
  4. vue项目做本地代理
  5. 【王道计组笔记】I/O输入输出系统基本概念
  6. mysql大表数据抽取_从云数据迁移服务看MySQL大表抽取模式
  7. osg 镜面_浙江天梭手表镜面抛光
  8. 家庭自建服务器风险,服务器虚拟化可能面临的五个风险
  9. html把切片变成div,关联网页自动切片生成Div+Css软件
  10. 在 k8S 中搭建 SonarQube 7.4.9 版本(使用 PostgreSQL 数据库)