产生原始数组元素的全排列,但是要求是非冗余的,也就是说原始数组可以有重复的元素,比如{2,2,2}这个数组,只有一种排列,2这个元素必须按相同处理,只是个数是3
分类:
编程语言 时间:
2015-04-13 16:18:01
阅读次数:
141
题意:
给n个不同的整数(3
输出方案数,以及按字典序输出每种方案。
思路:
一个很水的dfs全排列,加上特判就好了。
特判就是1->9的话就必定经过5等。
这里要注意的是。
中间所经过的数字是必须存在的。
比如要想1->9就必须有5.
5要么被用过,要么就经过5
例子就是 1 3 5 9这四个数。
实际的方案是只有2种
3 5 1 9 和 3 5 9 1
然后就是输入完...
分类:
其他好文 时间:
2015-04-13 12:56:19
阅读次数:
135
不得不佩服这位大哥,算法钻研的这么细,说的还很清楚:http://blog.csdn.net/morewindows/article/details/7370155算法并非照着贴来的,是我看了他的说明自己写的。去掉重复的非递归全排列:如何计算字符串的下一个排列了?来考虑"926520"这个字符串,我...
分类:
其他好文 时间:
2015-04-12 21:01:37
阅读次数:
164
字符串的全排列非递归算法是每次都寻找比前序列大一点的序列,如:起点:字典序最小的排列,例如12345终点:字典序最大的排列,例如54321过程:从当前排列生成字典序刚好比它大的下一个排列。算法过程:后找、小大、交换、翻转后找:字符串中最后一个升序的位置i,即S[k]>S[k+1](k>i),S[i]...
分类:
编程语言 时间:
2015-04-11 20:38:52
阅读次数:
184
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #define sc(x) scanf("%d",&(x)) 8 #define sc2(x,y) scanf("%d%d", &(x), &(y))...
分类:
其他好文 时间:
2015-04-10 19:57:35
阅读次数:
154
题目:给定字符串S[0...N-1],设计算法,枚举S的全排列。假设字符串为“1234”,首先考虑1,然后问题就变成了考虑“234”的全排列,所以问题规模缩小了1,然后再考虑2,依次类推。可以采用递归算法。1-2342-1343-1244-123假设有重复字符,则重复字符的全排列就是每个字符分别与它...
分类:
编程语言 时间:
2015-04-10 17:17:56
阅读次数:
149
固然我们可以自己使用递归编写全排列程序,但是既然STL里面已将有了这个功能为什么不直接用呢,下面就写一下直接使用C++ STL生成全排序的程序函数名:next_permutation包含头文件:algorithm函数原型:template bool next_permutation(Bidirec....
分类:
编程语言 时间:
2015-04-10 15:09:24
阅读次数:
212
全排列算法是一种比较常考的算法,他的做法也比较多样。
首先我们来看看最符合我们直观思考的,思路是这样的:假如没有重复元素时,传入一个数组A,并插入到另外一个数组B中,假如B中已经包含这个元素,则跳过,否则插入数组B。我们来看看具体代码:
public static void permutation1(final String str, String buffer){
if (s...
分类:
编程语言 时间:
2015-04-09 17:33:26
阅读次数:
145
1.题目描述:点击打开链接
2.解题思路:本题通过观察发现实际上是找符合这样的等式的一个排列:
C(n-1,0)*a[0]+C(n-1,1)*a[1]+...+C(n-1,n-1)*a[n-1]==sum
其中数组a是1~n的一个排列,C(n-1,i)代表组合数。这样的话,可以花费O(N^2)时间预先计算好所有组合数,然后用next_permutation函数枚举下一个排列即可。如果发现正好...
分类:
其他好文 时间:
2015-04-08 16:37:15
阅读次数:
100
http://poj.org/problem?id=2718从一些数里面选择一个子集组成一个数,余下的数组成另外一个数,(数不能以0开头)问两个数的差的绝对值最小是多少!不管是奇数还是偶数,要想绝对值最小,那么两个数的位数就要尽量接近,所以每一个数的位数都是n/2,枚举这些数的全排列,然后去找这个最...
分类:
其他好文 时间:
2015-04-08 10:26:54
阅读次数:
125