Description

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

solutio

这题复杂负很诡,爆搜可以过去
我写的状压DP,复杂度和搜索一样,\(O(10!*10*d* T)\)
设状态为 \(f[i][j]\) 表示已经选了序列中的位置状态为 \(i\) ,mod d等于 \(j\) 的方案数
转移运用读入优化的方法,直接 \(*10+a[i]\) 取模就行

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#define RG register
#define il inline
#define iter iterator
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
const int N=15;
int f[1<<10][1005],t[15],mul[N];char s[N];
void work()
{scanf("%s",s);int n=strlen(s),d;int lim=(1<<n)-1;RG int i,j,k;scanf("%d",&d);f[0][0]=1;for(i=0;i<lim;i++){for(j=0;j<d;j++){if(!f[i][j])continue;for(k=0;k<n;k++){if((1<<k)&i)continue;f[i|(1<<k)][(j*10+s[k]-48)%d]+=f[i][j];}}}for(i=0;i<n;i++)t[s[i]-48]++;for(i=0;i<=9;i++)if(t[i])f[lim][0]/=mul[t[i]],t[i]=0;printf("%d\n",f[lim][0]);memset(f,0,sizeof(f));
}int main()
{int T;cin>>T;mul[0]=1;for(int i=1;i<=10;i++)mul[i]=mul[i-1]*i;while(T--)work();return 0;
}


转载于:https://www.cnblogs.com/Hxymmm/p/7728205.html

bzoj 1072: [SCOI2007]排列perm相关推荐

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

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

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

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

  3. [BZOJ1072][SCOI2007]排列perm

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

  4. bzoj1072: [SCOI2007]排列perm

    思路:状压dp,f[i][j]表示新的排列的状态为i(也就是新的排列已经选了哪些数),然后模d的余数为j的方案数. 但考虑到可能有些数会出现多次,假设一个数x出现了cnt[x]次,那么对于一个可行的答 ...

  5. BZOJ 1072 排列

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

  6. [BZOJ 1072] 排列perm

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

  7. [BZOJ1072/SCOI2007]排列prem

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

  8. BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]

    4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...

  9. bzoj 4517: [Sdoi2016]排列计数

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 637  Solved: 396 [Submit][Stat ...

  10. BZOJ 1070: [SCOI2007]修车(最小费用最大流)

    建图很神奇..建完图其实就是裸的费用流了.. -------------------------------------------------------------- #include<cs ...

最新文章

  1. 不想被问年终奖?2018年春节自救攻略来了!
  2. 深度学习之Windows下安装faster-rcnn
  3. 买卖股票的最佳时机III
  4. 2016年10月20日 .NET Core 1.0.2 更新
  5. mysql设置账号过期
  6. 【设计素材】表格数据形平面海报素材
  7. 微信JS图片上传与下载功能--微信JS系列文章(三)
  8. 两个Android选择文件对话框
  9. Spring mvc 拦截静态资源配置管理
  10. java大神养成计划
  11. Android 权限汇总大全
  12. 一文读懂Faster RCNN(大白话,超详细解析)
  13. 模仿电影中黑客电脑界面,CMD装逼代码
  14. mov格式如何转换成mp4?详细步骤教程
  15. jzoj 5778 没有硝烟的战争
  16. 期货大佬给交易者的交易箴言,值得珍藏品读!
  17. iOS 初学者功能代码大集合,个人笔记
  18. linux 修改hosts立即生效设置
  19. Atitit ffmpeg功能表 多媒体处理类库工具 音频视频 1.1.ffmpeg音视频合成  1.2.Atitit 视频音频分离 提取法 1.3.ffmpeg对视频封装和分离 使用ffmpeg对
  20. 2020北航计算机夏令营机试题目讲解

热门文章

  1. 一篇文章讲清楚人工智能、机器学习和深度学习的区别与联系
  2. Windows中文编码显示问题集锦
  3. 脑力劳动者,如何休息使自己精力充沛
  4. 再见了,面向对象编程
  5. 问题:sql server 2005 中数据库关系图无法使用——基于SQL Server 2005
  6. layoutSubview 总结
  7. ps aux 输出格式
  8. history指令显示日期时间
  9. mysql的瓶颈_MySQL 瓶颈分析及优化
  10. 字长为16位的计算机_字长为16位表示这台计算机最大能计算