生成可重集的排列
2016-08-10 13:43
183 查看
把数组中每个元素不重复的取到,并且不超过数组中某个元素的个数。
代码如下
如有不当之处欢迎指出!
代码如下
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=1000+5; int res[maxn]; //统计数组中某个元素出现的次数 void dfs(int *a,int *p,int cur,int n) { if(cur==n) { for(int i=0;i<n;++i) { printf("%d ",a[i]); } printf("\n"); } else for(int i=0;i<n;++i) { if(!i||p[i]!=p[i-1]) { int cnt=0; for(int j=0;j<cur;++j) { if(a[j]==p[i]) ++cnt; } if(cnt<res[p[i]]) { a[cur]=p[i]; dfs(a,p,cur+1,n); } } } } int main(){ int n; scanf("%d",&n); memset(res,0,sizeof(res)); int p[maxn],a[maxn]; for(int i=0;i<n;++i){ scanf("%d",&p[i]); res[p[i]]++; } sort(p,p+n); //排序,方便判定 dfs(a,p,0,n); return 0; }
如有不当之处欢迎指出!
相关文章推荐
- 生成可重集的排列
- 生成可重集的排列(方法)
- 生成可重集的排列
- 枚举排列问题:生成1-n的排列和可重集排列问题
- 枚举排列----生成可重集的排列
- 暴力搜索专题小结:全排列及可重集排列生成算法
- 生成可重集排列
- 生成可重集排列
- 生成可重集的排列
- n排列生成与可重集排列
- 生成可重集的排列
- 暴力求解法_枚举排列(生成1~n 的排列,生成可重集的排列,下一个排列)
- 生成可重集的排列
- Poj-1731 Orders(生成可重集的排列)
- 生成可重集的排列
- 生成可重集的排列模板
- [Day 1] 7.2.2 生成可重集的排列(包括利用STL)
- 入门经典 第七章 7.2.2 生成可重集的排列
- 生成1~n的排列,以及生成可重集的排列
- 枚举生成可重集排列