uva 729(枚举排列)
2015-08-30 22:13
435 查看
题目大意:
输入一个数T,表示有T组数据。 输入两个数n, h;表示长度为n的数组,由h个1和(n-h)个0组成;
求该数组的全排列;
运用STL中的next_permutation()函数,直接获得下一个排列;
输入一个数T,表示有T组数据。 输入两个数n, h;表示长度为n的数组,由h个1和(n-h)个0组成;
求该数组的全排列;
<span style="font-size:12px;">#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int n, h; int p[20], A[20]; void print_permutation(int cur){ 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 c1 = 0, c2 = 0; for(int j = 0; j < cur; ++j) if(A[j] == p[i]) c1++; for(int j = 0; j < n; ++j) if(p[i] == p[j]) c2++; if(c1 < c2){ A[cur] = p[i]; print_permutation(cur+1); } } } } int main() { int T; scanf("%d", &T); while(T--){ memset(p, 0, sizeof(p)); scanf("%d%d", &n, &h); for(int i = n-1; i >= n-h; --i) p[i] = 1; print_permutation(0); if(T) printf("\n"); } }</span>
运用STL中的next_permutation()函数,直接获得下一个排列;
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int n, h; int p[20], A[20]; int main() { int T; scanf("%d", &T); while(T--){ memset(p, 0, sizeof(p)); scanf("%d%d", &n, &h); for(int i = n-1; i >= n-h; --i) p[i] = 1; for(int i = 0; i < n; ++i) printf("%d", p[i]); printf("\n"); while(next_permutation(p, p+n)){ for(int i = 0; i < n; ++i) printf("%d", p[i]); printf("\n"); } if(T) printf("\n"); } }
相关文章推荐
- 程序员总结:帮助你早些明白一些道理
- javascript学习总结(一):基础知识。
- Ubuntu14.04增加右键菜单=>“run_on_python”
- XAMPP+TestLink安装步骤和测试流程
- 宝宝出生40天
- Python爬虫学习记录(1)——Xiami全站播放数
- 操作Json和Json数组的一些基本方法
- 线性表、栈和队列
- 4. Median of Two Sorted Arrays
- Hibernate的查询方式知多少 二
- PHP生成验证码时“图像因其本身有错无法显示”的解决方法
- 人生中的核心基本之事
- 【转】 Android代码混淆之混淆规则
- 总结一些it学习的网站
- 操作系统中的进程与线程
- 【C++ STL】深入解析神秘的 --- 仿函数
- muduo网络库源码学习————日志滚动
- 程序三层架构
- java基础 求素数
- Java LruCache