bzoj1072: [SCOI2007]排列perm
思路:状压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]!就可以完成去重了。
![](/assets/blank.gif)
![](/assets/blank.gif)
#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相关推荐
- [BZOJ1072][SCOI2007]排列perm
[BZOJ1072][SCOI2007]排列perm 试题描述 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有 ...
- bzoj 1072: [SCOI2007]排列perm(状压dp)
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2272 Solved: 1432 [Submit][ ...
- [BZOJ1072/SCOI2007]排列prem
Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种. Input ...
- BZOJ 1072: [SCOI2007]排列perm [DP 状压 排列组合]
题意:给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0) 100%的数据满足:s的长度不超过10, 1<=d<=1000, 1<=T<=15 看到整 ...
- [BZOJ 1072] 排列perm
Link: BZOJ 1072 传送门 Solution: 一道直接next_permutation纯暴力就能过的题? 难道2007年时大家都不知道next_permutation这个函数吗 还是用复 ...
- 2017.7.27 排列perm 思考记录
这个题可以通过技巧找思路的. 首先,字符串小于10,那么这肯定是用来状压的. 用来存数肯定不行,能用0.1表示的可以是使用情况 还要满足倍数,所以我们可以存余数 那么就好做了,直接递推dp 还要注意如 ...
- 2019.4.summary
2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...
- BZOJ 1072 排列
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 128 MB Description 给一个数字串s和正整数d, 统计s有多少种不同的排 ...
- BZOJ第一页刷题计划
BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...
最新文章
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色配置)实战
- 30天敏捷生活(5):形成个人价值观
- .Net高级技术——IDisposable
- C# 繁体,简体互转
- 虚拟专题:知识图谱 | 知识图谱多跳问答推理研究进展、挑战与展望
- java addobject_springMVC后台的值无法通过ModelAndView的addObject传到前台
- CSS文件的三种引入方式
- 设计一个方法输入字符串,字节数,输出截取的字符串
- 五个案例“熄灭”Nginx漏洞隐患
- verilog教程——initial语句和always语句
- 企业微信开发服务端报错汇总(手把手教你企业微信开发五)
- 黄海广:那些年做的学术公益——你不是一个人在战斗
- 谁再说“游戏没用”,就拿这个回怼他!
- iOS 加载本地gif缓慢
- 69的人因为穷不谈恋爱,这届年轻人脱单太难了
- 手机在线提取视频中的音频方法
- 管理学生营养餐很重要
- 格式化硬盘出现/dev/sdb2 is apparently in use by the system错误
- GSMArena魅族mx四核评测全文|去除英文|
- 匈牙利编码_匈牙利信息图形学的开端