【模板】 全排列 有重复元素的全排列
全排列
#include<bits/stdc++.h> using namespace std; int pl[1001]; void print (int n){for(int i=1;i<=n;i++) cout<<" "<<pl[i];cout<<endl; } void pp(int n,int pos=1){if(pos==n+1) {print(n);return ;}for(int i=1;i<=n;i++){bool ok=1;for(int j=1;j<pos;j++){if(pl[j]==i) ok=0;}if(ok) {pl[pos]=i; pp(n,pos+1);}} } int main(){int n;cin>>n;pp(n);return 0; }
有重复元素的全排列//然而并不能过所有测试点
#include<bits/stdc++.h> using namespace std; char pl[1001]; int cnt; void print(int n){for(int i=0;i<n;i++)cout<<pl[i];cnt++;cout<<endl; } void pp(char p[],int n,int pos=0){if(pos==n){print (n);return ;}for(int i=0;i<n;i++){if(i==0||p[i]!=p[i-1]){int c1=0,c2=0;c1=count (pl,pl+pos,p[i]);c2=count (p,p+n,p[i]);if(c1<c2){pl[pos]=p[i];pp(p,n,pos+1);}}} } int main(){int n;char ddd[2000];cin>>n;for(int i=0;i<n;i++){cin>>ddd[i];}pp(ddd,n);cout<<cnt;return 0; }
所以我用STL模板
STL大法好
这里是char类型的
#include<bits/stdc++.h> using namespace std; int main(){long long cnt=0;ios::sync_with_stdio(false);char dd[5000];int n;cin>>n;for(int i=0;i<n;i++)cin>>dd[i];sort (dd,dd+n);do{for(int i=0;i<n;i++){printf("%c",dd[i]);}cnt++;printf("\n");}while(next_permutation(dd,dd+n));printf("%d",cnt);return 0; }
转载于:https://www.cnblogs.com/luv-letters/p/8479881.html
【模板】 全排列 有重复元素的全排列相关推荐
- 九章算法面试题54 带重复元素的全排列
九章算法官网-原文网址 http://www.jiuzhang.com/problem/54/ 题目 给定一个带重复元素的整数集合,求出这个集合中所有元素的全排列.对于集合[1,1,2],其本质不同的 ...
- 算法学习——求有重复元素的全排列(递归)
算法学习--求有重复元素的全排列(递归) 思路:看到这个题目首先能想到的一点就是:①我们要求元素的所有全排列②我们要对求出的全排列去重 第一步:求全排列,这里先讨论对不含重复元素的数组元素进行全排列, ...
- 7-1 有重复元素的全排列 (10 分)
7-1 有重复元素的全排列 (10 分) 计算给定的n个数有多少种排列方式,即求全排列(可能出现重复的元素) 输入格式: 第一行输入数字的数量n(n>2),第二行给出每一个数字. 输出格式: 一 ...
- 全排列:不含重复元素和含重复元素的全排列
1.不含重复元素 算法思路: 1.n个元素全排列 = (n-1)个元素的全排列+(另一个元素作为前缀) 2.出口:如果只有一个元素的全排列,则说明已经排完,输出数组: 3.不断将每个元素放在第一个元素 ...
- LeetCode Permutations II(有重复元素的全排列)
问题:给出一个有重复元素的数组,要求输出全排列 思路:先排序,然后使用next_permutation 具体代码参考: https://github.com/wuli2496/OJ/tree/mast ...
- 减治求有重复元素的全排列
求n个元素的全排列的所有解可以用减治法:每次拎出一个数做前缀,对剩下的元素再求全排列,直至只剩一个元素.代码源自<算法分析与设计(王晓东)>,复杂度O(n!) 1 //输出k~m的所有全排 ...
- 包含重复元素的全排列
#include<iostream> #include<fstream> #include<algorithm> using namespace std;int n ...
- “九韶杯”河科院 D.数列重组(含重复元素的全排列+构造方法)
对于含有重复元素序列的全排列,为了再次排列后得到的序列中各不重复,需要用到c++中的do{}while(next_permutation(a,a+n))函数 对于判断每次排序后的序列是否符合条件,用到 ...
- E. Tyler and Strings(组合计数 + 树状数组/线段树)(带重复元素的全排列)
题目链接 主要思路还是比较好想的,一些细节公式预处理比较难搞- 参考题解 分析 从前往后遍历,如果s[]剩下的数中,s[i] < t[i]则对答案是有贡献的: 贡献就是后面位置[i+1 ~ n] ...
最新文章
- 浅谈单片机程序设计中的“分层思想”!
- Requirejs加载超时问题的一个解决方法:设置waitSeconds=0
- 按字符串长度切割字符串(支持汉字占2个长度)
- Datatables表格数据初始化时回调函数中修改要显示的值
- 单链表带头结点不带头结点
- 判别模型、生成模型与朴素贝叶斯方法
- Eclipse和PyDev搭建完美Python开发环境(Windows篇)
- ElasticSearch 集群监控
- 读掘金小册组件精讲总结1
- 读书笔记 摘自:《斯坦福极简经济学》
- 华为路由器Nasp设置 以及直连路由,静态路由,缺省路由,
- 关于电脑使用的实用技巧
- 高德地图样式主题设置
- 小武学fpgastep4
- web前端图片极限优化策略
- 问题 C: 货币系统
- 战旗类DotA游戏原代码及项目报告
- VQA系列论文(三)
- 飞行器识别---综述
- 作为硬件工程师,常用设计资源合集