这个题和permutation以及subset一样, 也属于排列组合问题, 用recursive做。 这种题的时间消耗都是指数级别的 注意for loop里面的第二个if语句是要除去重复的数列,例如{2,2,3,6,7} target 7, 第二个2不需要再次考虑,因为作用和第一个相同,需要注意的是 ...
分类:
其他好文 时间:
2016-08-18 08:42:29
阅读次数:
200
这个题和permutation很像,只是需要考虑重复的数字。重复的数字只有第一次出现的时候加入,保证永远都是第一个重复出现的数字在前,而且要加过(用used数组纪律的时候,重复数字第一个如果没有被mark,就应该跳过)。 ...
分类:
其他好文 时间:
2016-08-18 08:40:42
阅读次数:
120
潘多拉之门 首先一发DFS,注意字母重复。 一发STL next_permutation ...
分类:
其他好文 时间:
2016-08-17 21:13:45
阅读次数:
101
next_permutation()
prev_permutation()
#include
#include
#include
// 排列组合开始之前一定要先排序
using namespace std;
int main()
{
vector ivec;
ivec.push_back(1);
ivec.push_back(2);
ivec.push_back(3);
fo...
分类:
编程语言 时间:
2016-08-17 09:04:05
阅读次数:
232
题意:给一个 n,求在 n 的所有排列中,恰好有 k 个数a[i] > i 的个数。 析:很明显是DP,搞了好久才搞出来,觉得自己DP,实在是太low了,思路是这样的。 dp[i][j]表示 i 个排列,恰好有 j 个数,dp[i][j] = dp[i-1][j] * (j+1) + dp[i-1] ...
分类:
其他好文 时间:
2016-08-16 21:37:25
阅读次数:
167
原理简介:
1,从数组尾端开始遍历,找到第一个nums[i]
2,要求下一个子序列,那么我们需要在1中得到的单调子数组中找到一个比nums[i]大的数字,并且要尽量小。这样才能保证是下一个子序列。由于子数组是单调递减的,那么我们从数组尾端开始找到第一个比nums[i]大的,那么这个数字就是满足我们要求的数字。将其与nums[i]交换
3,交换之后,大于i组成的子数组仍然是递减的。所以我们只需...
分类:
其他好文 时间:
2016-08-16 18:46:44
阅读次数:
101
Given a string, determine if a permutation of the string could form a palindrome. For example,"code" -> False, "aab" -> True, "carerac" -> True. 要点:学习 ...
分类:
其他好文 时间:
2016-08-15 06:41:03
阅读次数:
119
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 题目大意: 两个序列h和c,h为1~n的乱序。h[0]=h[n+1]=0,[A]表示A为真则为1,假为0. 函数f(h)=(i=1~n)∑ci[hi>hi?1 && hi>hi+1] 现在给定c ...
分类:
其他好文 时间:
2016-08-13 22:36:36
阅读次数:
248
此题为小白书暴力求解法的训练参考 翻译请戳 http://luckycat.kshs.kh.edu.tw/ 解题思路 嗯。。。用c++里的next_permutation。。。 代码 ...
分类:
其他好文 时间:
2016-08-12 00:59:31
阅读次数:
151