[BZOJ 1072] 排列perm
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相关推荐
- BZOJ 1072 排列
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 128 MB Description 给一个数字串s和正整数d, 统计s有多少种不同的排 ...
- bzoj 1072: [SCOI2007]排列perm(状压dp)
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2272 Solved: 1432 [Submit][ ...
- [BZOJ1072][SCOI2007]排列perm
[BZOJ1072][SCOI2007]排列perm 试题描述 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有 ...
- BZOJ 1072: [SCOI2007]排列perm [DP 状压 排列组合]
题意:给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0) 100%的数据满足:s的长度不超过10, 1<=d<=1000, 1<=T<=15 看到整 ...
- 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 ...
- [BZOJ 2111][ZJOI2010]Perm 排列计数(Lucas定理)
Description 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic ...
- bzoj 3100 排列
题目大意: 给你长度为 \(1e6\) 的序列, 求最大的 \(K\) 使得序列中含有一个 \(K\) 的排列 做法: 性质: 区间包含1, 元素不重, 区间最大值=区间长度 枚举一个 \(1\) 让 ...
- bzoj1072: [SCOI2007]排列perm
思路:状压dp,f[i][j]表示新的排列的状态为i(也就是新的排列已经选了哪些数),然后模d的余数为j的方案数. 但考虑到可能有些数会出现多次,假设一个数x出现了cnt[x]次,那么对于一个可行的答 ...
- 2017.7.27 排列perm 思考记录
这个题可以通过技巧找思路的. 首先,字符串小于10,那么这肯定是用来状压的. 用来存数肯定不行,能用0.1表示的可以是使用情况 还要满足倍数,所以我们可以存余数 那么就好做了,直接递推dp 还要注意如 ...
最新文章
- linux如何安装neo4j,Ubuntu16.04 如何安装neo4j数据库
- 何时将空间编码为加号(+)或%20?
- 阿里云异构计算产品家族亮相 覆盖全场景AI和高性能计算需求
- Java基础23-集合类2(Set接口,Iterator迭代器)
- Android_项目文件结构目录分析
- 双路由器双小型交换机组建公司网络,2个公网IP上网案例(转载)
- 内部人示范(野生项目笔记02)
- et中计算机的快捷键,ET软件快捷键
- [杂记]注册电气工程师考试复习及考试杂谈
- 服务器和客户端的通信绘图
- MacBook安装双系统多分区共享访问解决方案
- 线性代数之——正定矩阵
- 计算机拓展训练论文,素质拓展训练论文拓展训练论文
- Unity Shader 学习记录(5) —— 实现漫反射光照模型
- css实现文字逐个显示
- python实时监控文件目录_教你三种方法,用 Python实时监控文件
- python django考勤签到系统
- linux 自动mv脚本,linux replace rm to mv(脚本)
- 微领地商业模式开发 软件开发
- edge浏览器ie模式设置方法介绍
热门文章
- 手机技巧:手机电量为啥到20%就会提醒充电,看完你就懂了!
- 网络知识:DNS 访问原理详解
- 3大原则让你的编程之路越走越顺
- MongoDB常用语句
- 【必备】jQuery性能优化的38个建议
- mysql_install_db卸载_MySQL数据库的卸载与安装
- 可变参数列表(va_list,va_arg,va_copy,va_start,va_end)
- 前端抢饭碗系列之Vue项目如何做单元测试
- shell编程系列20--文本处理三剑客之awk常用选项
- eclipse中将一个项目作为library导入另一个项目中