Link:

BZOJ 1072 传送门

Solution:

一道直接next_permutation纯暴力就能过的题?

难道2007年时大家都不知道next_permutation这个函数吗

还是用复杂度更优的状压DP吧

设$dp[i][j]$为状态为$i$且对$d$余$j$的个数,

注意$dp[(1<<len)-1][0]$最后除去$\prod_{i=0}^9 cnt[i]!$,排除重复项

现在对状压DP状态的选取有了些感悟,

一般来说第一项表示状态,而第二项表示的一般都是于答案相关且包含答案情况的

(EX:求整除,表示当前对$d$的余数)

Code:

#include <bits/stdc++.h>using namespace std;int T,d,len,cnt[15],dupli[15],dp[1200][1010];
char s[15];int main()
{scanf("%d",&T);while(T--){scanf("%s %d",s,&d);len=strlen(s);for(int i=0;i<15;i++) dupli[i]=1;memset(cnt,0,sizeof(cnt));memset(dp,0,sizeof(dp));for(int i=0;i<len;i++)cnt[s[i]-'0']++,dupli[s[i]-'0']*=cnt[s[i]-'0'];dp[0][0]=1;for(int i=0;i<(1<<len);i++)for(int j=0;j<d;j++)if(dp[i][j])for(int k=0;k<len;k++)if(!(i&(1<<k)))dp[i|(1<<k)][(j*10+(s[k]-'0'))%d]+=dp[i][j];for(int i=0;i<=9;i++) dp[(1<<len)-1][0]/=dupli[i];printf("%d\n",dp[(1<<len)-1][0]);}return 0;
}

转载于:https://www.cnblogs.com/newera/p/9119428.html

[BZOJ 1072] 排列perm相关推荐

  1. BZOJ 1072 排列

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

  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]排列perm

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

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

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

  5. BZOJ 2111 [ZJOI2010]Perm 排列计数:Tree dp + Lucas定理

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2111 题意: 给定n,p,问你有多少个1到n的排列P,对于任意整数i∈[2,n]满足P[i ...

  6. [BZOJ 2111][ZJOI2010]Perm 排列计数(Lucas定理)

    Description 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic ...

  7. bzoj 3100 排列

    题目大意: 给你长度为 \(1e6\) 的序列, 求最大的 \(K\) 使得序列中含有一个 \(K\) 的排列 做法: 性质: 区间包含1, 元素不重, 区间最大值=区间长度 枚举一个 \(1\) 让 ...

  8. bzoj1072: [SCOI2007]排列perm

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

  9. 2017.7.27 排列perm 思考记录

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

最新文章

  1. linux如何安装neo4j,Ubuntu16.04 如何安装neo4j数据库
  2. 何时将空间编码为加号(+)或%20?
  3. 阿里云异构计算产品家族亮相 覆盖全场景AI和高性能计算需求
  4. Java基础23-集合类2(Set接口,Iterator迭代器)
  5. Android_项目文件结构目录分析
  6. 双路由器双小型交换机组建公司网络,2个公网IP上网案例(转载)
  7. 内部人示范(野生项目笔记02)
  8. et中计算机的快捷键,ET软件快捷键
  9. [杂记]注册电气工程师考试复习及考试杂谈
  10. 服务器和客户端的通信绘图
  11. MacBook安装双系统多分区共享访问解决方案
  12. 线性代数之——正定矩阵
  13. 计算机拓展训练论文,素质拓展训练论文拓展训练论文
  14. Unity Shader 学习记录(5) —— 实现漫反射光照模型
  15. css实现文字逐个显示
  16. python实时监控文件目录_教你三种方法,用 Python实时监控文件
  17. python django考勤签到系统
  18. linux 自动mv脚本,linux replace rm to mv(脚本)
  19. 微领地商业模式开发 软件开发
  20. edge浏览器ie模式设置方法介绍

热门文章

  1. 手机技巧:手机电量为啥到20%就会提醒充电,看完你就懂了!
  2. 网络知识:DNS 访问原理详解
  3. 3大原则让你的编程之路越走越顺
  4. MongoDB常用语句
  5. 【必备】jQuery性能优化的38个建议
  6. mysql_install_db卸载_MySQL数据库的卸载与安装
  7. 可变参数列表(va_list,va_arg,va_copy,va_start,va_end)
  8. 前端抢饭碗系列之Vue项目如何做单元测试
  9. shell编程系列20--文本处理三剑客之awk常用选项
  10. eclipse中将一个项目作为library导入另一个项目中