POJ 1833 生成排列】的更多相关文章

题目链接:POJ 1833 /************************************ * author : Grant Yuan * time : 2014/10/19 16:38 * source : POJ 1833 * algorithm: STL+排列的生成 *************************************/ #include <iostream> #include <algorithm> #include <cstdio&…
利用深度优先搜索的性质可以方便的生成n的排列和组合,但是生成组合时每个组合里面元素的个数必须事先确定,以前以为生成组合跟排列一样到n时就可以回溯,直到今天做了某题之后才发现那是错的,那样做生成不了所有的组合. 生成排列(默认是全排列,也可以传个参数生成n的k排列) #include<cstdio> #define MAXN 111 using namespace std; int tmp[MAXN],vis[MAXN],n,k; void dfs(int cnt,int num = n){ i…
题意: 给你某个排列 求从下一个排列开始的第k个排列如果是最后一个排列 则下一个排列为1 2 3 ... n// 1 用stl 里面的 next_permutation// 2 用生成下一个排列算法// 1)从末尾开始找第一个正序 A[i-1]<A[i]// 2)从i开始找最大的j A[j]>A[i-1]// 3)交换 A[i-1],A[j]// 4)将下标从i开始的序列翻转 #include <iostream> #include <string> #include&…
排列 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 15173   Accepted: 6148 Description 题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列. 任务描述: 给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为…
题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列. 任务描述: 给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列1 2 3…n. 比如:n = 3,k=2 给出排列2 3 1,则它的下1个排列为3 1 2,下2个排列为3 2 1,因此答案为3 2 1.  Input 第一行是一个正整数m,表…
ID Codes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6229   Accepted: 3737 Description It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In order to exercise greater control over its citizens and ther…
http://poj.org/problem?id=1833 next_permutation这个函数是用来全排列的,按字典的序进行排列,当排列无后继的最大值时,会执行字典升序排列,相当于排序: 当排列无后继的最大值时返回值为false,其他的为true: 也可以在其后加一个cmp函数 #include <stdio.h> #include <iostream> #include <algorithm> using namespace std; int main() {…
from <python cookbook> 19.15 任务 需要对一个序列的排列(permutation).组合(combination)或选择(selection)进行迭代操作.即使初始的序列长度并不长,组合计算的规则却显示生成的序列可能非常庞大,比如一个长度为13的序列有超过60亿种可能的排列.所以,你肯定不希望在开始迭代前计算并生成序列中的所有项 解决方案 生成器允许你在迭代的时候一次一个的计算需要的对象.如果有很多这种对象,而且你也必须逐个的检查他们,那么程序无可避免的会用很长时间…
http://poj.org/problem?id=1833 题意: 给出一个排序,求出它之后的第k个排序. 思路: 排序原理: 1.如果全部为逆序时,说明已经全部排完了,此时回到1~n的排序. 2.从后往前找到第一对 ai<ai+1,然后从i+1~n寻找比ai大的最小的数并与之互换,之后再对i+1~n的数进行排序即可. #include<iostream> #include<algorithm> #include<cstring> #include<cst…
    对于生成{1,……,n}的所有n!个排列的问题,我们可以利用减治法,该问题的规模减一就是要生成所有(n-1)!个排列.假设这个小问题已经解决了,我们可以把n插入到n-1个元素的每一种排列中的n可能的位置中去,来得到较大规模大问题的一个解.按照这种方式生成的所有排列都是独一无二的,并且他们的总数应该是n(n-1)!=n!.这样,我们都得到了{1,……,n}的所有排列.     JohnsonTrotter算法实现形式.     JohnsonTrotter(n)         输入:一个…