C#求所有可能的排列组合】的更多相关文章

static System.Collections.Specialized.StringCollection MakeStrings(string[] characters, int finalStringLength) { int finalLength = finalStringLength; // The length of the final strings. System.Collections.Specialized.StringCollection existingStrings;…
题意:给定一个序列,让你求两种数,一个是求一个子序列,包含最大值和最小值,再就是求一个子集包含最大值和最小值. 析:求子序列,从前往记录一下最大值和最小值的位置,然后从前往后扫一遍,每个位置求一下数目就好. 求子集可以用排列组合解决,很简单,假设最大值个数是 n,最小值的数是 m,总数是 N,答案就是 (2^n-1) * (2^m-1)*2^(N-m-n), 当然要特殊判断最大值和最小值相等的时候. 当然也可以用容斥来求,就是总数 - 不是最大值的数目 - 不是最小值的数目 + 不是最大值也不是…
[题意]给定n,求Σi=0~nΣj=1~i s(i,j)*2^j*j!,n<=10^5. [算法]生成函数+排列组合+多项式求逆 [题解]参考: [BZOJ4555][Tjoi2016&Heoi2016]求和-NTT-多项式求逆 $ans=\sum_{i=0}^{n}\sum_{j=0}^{i}s(i,j)*2^j*j!$ 令$g(n)=\sum_{j=0}^{n}s(n,j)*2^j*j!$ 则ans是Σg(i),只要计算出g(i)的生成函数就可以统计答案. g(n)可以理解为将n个数划分…
题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数.         (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2,····,an互不相同,进行全排列,可得n!个不同的排列. 若其中某一元素ai重复了ni次,全排列出来必有重复元素,其中真正不同的排列数应为 ,即其重复度为ni! 同理a1重复了n1次,a2重复了n2次,····,ak重复了nk次,n1+n2+····+nk=n. 对于这样的n个元素进行全排列,可得…
Combinations 题意: 根据给定的n和k,生成从1到n范围内长度为k的排列组合 示例: n=4 k=2 [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2, 4], [3, 1], [3, 2], [3, 4], [4, 1], [4, 2], [4, 3]] 解题: 正常情况下我们通常想到的都是通过使用递归,以枚举的形式来生成组合.先从给定的范围中拿一个数出来,把它同剩下的每一个数进行组合,然后再在每个组合上对不存在于组合的每个数进行合并,这样依次…
最近编程经常遇到需要 排列&&组合(求子集) 的问题:遂整理一下. 1. 数字的排列与组合(递归):O(n!),O(nC(n,k)) * O(n) #include <stdio.h> int arr[100]; void init(int N) { for(int i = 0; i < N; ++i) arr[i] = i+1; } void print(int a[], int n) { for(int i = 0; i < n; ++i) printf(&qu…
今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: var n = 0; for (int i = 0; i < Math.Pow(26, n); ++i) { int t = i; string str = ""; for (int j = n - 1; j >= 0; --j) { int s = (int)Math.Pow…
排列组合 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status Description 有n种物品,并且知道每种物品的数量.要求从中选出m件物品的排列数.例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA"两种.    Input 每组输入数据有两行,第一行是二个数n,m(1<=m,n<=10)…
排列组合的概念 排列:从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangement). 组合:从m个不同的元素中,任取n(n≤m)个元素为一组,叫作从m个不同元素中取出n个元素的一个组合. 排列组合实现代码 上一个项目做的一个水路的路径规划时,用到了排列的数据结构.求任意N个点里M个点的不同顺序的组合个数. 这样求最优路径.下面贴一段不知道哪里找的排列组合的算法. public class PermutationAndCombin…
C#的排列组合类 //-----------------------------------------------------------------------------//// 算法:排列组合类//// 版权所有(C) Snowdust// 个人博客    http://blog.csdn.net/snowdust & http://snowdust.cnblogs.com// MSN & Email snowdust77@sina.com//// 此源代码可免费用于各类软件(含商…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满足要求的(x, y, z)有多少组,并且要考虑顺序. 思路:如果L%G != 0显然不存在这样的(x, y, z),相反肯定存在.具体做法就是将L/G分解质因子,得到:L/G = P1^t1 * P2^t2 * ... * Pk^tk,我们来考虑任意一个因子Pi^ti,此时(x/G, y/G, z/…
//----------------------------------------------------------------------------- // // 算法:排列组合类 // // 版权所有(C) Snowdust // 个人博客 http://blog.csdn.net/snowdust & http://snowdust.cnblogs.com // MSN & Email snowdust77@sina.com // // 此源代码可免费用于各类软件(含商业软件)…
国庆期间,省城刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的: 首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排; 然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个. 最后,揭开盖头,如果找错了对象就要当众跪搓衣板... 看来做新郎也不是容易的事情... 假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能. Input 输入数据的第一行是一个…
题意:一条整数链,要求相邻两数前一个整除后一个.给出链尾的数,求链的最大长度以及满足最大长度的不同链的数量. 类型:因式分解+排列组合 算法:因式分解的素因子个数即为链长,链中后一个数等于前一个数乘以某素因子,所以链的数量即为这些因子不全相异的全排列数:A!/(a1!a2!a3!..) #include <cstdio> #include <cmath> #include <iostream> using namespace std; typedef long long…
Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]思路 对于排列组合问题首先应该想到使用递归思想来解决.另外还有一种非递归的解决办法. 解决代码 递归方式 图示步骤 解决代码 class Solution(object):…
题目链接: https://vjudge.net/contest/237052#problem/H 这里给你一串数字,让你计算同时拥有这串数字最大值和最小值的子集(连续)和子序列(可以不连续)的数量,计算子串的数量是为了避免重复,我们可以从前往后扫描,前面的子集不能包括后面的,后面的可以包括前面的,我们每次记录最小值和最大值的位置t1,t2,起初把t1,t2设为0,每当遇到最大值或最小值是就把t1或t2的值变成最小值或最大值的下标,然后sum=sum+min(t1,t2),我也是刚刚看别人博客才…
[题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数. [算法]计数DP+排列组合+lucas [题解]令i的父亲为i/2,转化为要求给一棵n个点的完全二叉树编号使得儿子编号>父亲编号. 设\(f[i]\)表示以第i个点为根的子树的编号方案数(1~sz[i]的排列),考虑从两个儿子处转移. 排列的本质是大小关系,所以两个排列组合起来相当于对1~sz[i&…
题目链接 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后,则q的总位数不超过w. 在这里,正整数k(1≤k≤9)和w(k〈w≤30000)是事先给定的. 问:满足上述条件的不同的r共有多少个? 我们再从另一角度作些解释:设S是长度为w 的01字符串(即字符串S由w个"0"或"1"组成),S对应于上述条件(3)中的q…
排列组合是数学中的一个分支.在计算机编程方面也有非常多的应用,主要有排列公式和组合公式.错排公式.母函数.Catalan Number(卡特兰数)等. 一.有关组合数学的公式 1.排列公式   P(n,r)=n!/r! 2.组合公式   C(n,r)=n!/(r!*(n-r)!)  C(n,r)=C(n-1,r)+C(n-1,r-1) 3.错排公式   d[1]=0;   d[2]=1; d[n]=(n-1)*(d[n-1]+d[n-2]) 4.卡特兰数 前几项:1, 2, 5, 14, 42,…
题目链接:https://leetcode.com/problems/combinations/#/description    Problem:给两个正数分别为n和k,求出从1,2.......n这n个数字选择k个数字作为一个组合,求出所有的组合.   数学问题:排列组合问题,可以得到这样的组合个数为:C(n,k)     代码实现:递归程序实现. 从1开始遍历到n为止,中间使用tempList保存每一个组合,只有当这个tempList的长度等于k时,将这个tempList添加到ans中.  …
[容斥原理] 对于统计指定排列方案数的问题,一个方案是空间中的一个元素. 定义集合x是满足排列中第x个数的限定条件的方案集合,设排列长度为S,则一共S个集合. 容斥原理的本质是考虑[集合交 或 集合交的补集]和[集合并 或 集合并的补集]之间相互转化的问题. 定义目标函数为f(m),已知函数g(T).(例如已知集合并,则T表示所有T个集合的集合并,通常g(T)=C(n,T)*T个集合的集合并) 当两者都不是补集或两者都是补集时,有f(S)=Σ(-1)|T|-1g(T),其中T为S的非空子集,即奇…
[题目]F - Many Easy Problems [题意]给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模924844033.n<=2*10^5. [算法]排列组合+NTT [题解]考虑每个点只会在k个点都在其一个子树时无贡献,即: $$ANS_k=\sum_{x=1}^{n}\binom{n}{k}-\sum_{y}\binom{sz[y]}{k}+\binom{n-sz[y]}{k}$$ 令$cnt_i$表示满足s…
[题意]n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui].B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数.当有一位同学的一门必修课分数不同时视为两种情况不同.n,m<=100,Ui<=10^9. [算法]计数DP+排列组合+拉格朗日插值 [题解]把分数作为状态不现实,只能逐门课考虑. 设$f[i][j]$表示前i门课,有j个同学被碾压的情况数,则有: $$f[i][j]=g(i)\cdot\sum_{k=j…
---恢复内容开始--- Hearthstone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1102    Accepted Submission(s): 544 Problem Description Hearthstone is an online collectible card game from Blizzard Ente…
[题目]H. Ember and Storm's Tree Game [题意]Zsnuoの博客 [算法]动态规划+排列组合 [题解]题目本身其实并不难,但是大量干扰因素让题目显得很神秘. 参考:Zsnuoの博客 一.首先Ember必胜(考虑n个点连成一条链),故合法的树一定满足先手必胜.当Storm选择的链满足单调或单峰时,每一条链对答案贡献两对(i,op). 解释:单调时,考虑翻转最后一个数和从第二个数开始取负两种操作.单峰时,上凸考虑翻转顶峰和顶峰右侧的数,下凸考虑取负顶峰和顶峰右侧的数.…
[题目]C. Maximum Element [题意]给定n和k,定义一个排列是好的当且仅当存在一个位置i,满足对于所有的j=[1,i-1]&&[i+1,i+k]有a[i]>a[j],求长度为n的好的排列数.n<=10^6. [算法]排列组合+动态规划 [题解]设D(n)表示长度为n且满足a[n]=n的好的排列数,考虑这样的一个排列w. 如果数字n-1的位置j<n-k,那么显然这是一个好的排列. 如果数字n-1的位置j>=n-k,那么位置j前的数字一定<n-1…
题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith Lord Darth Vader. A powerful Force-user who lived during the era of the Galactic Empire, Marek originated from the Wookiee home planet of Kashyyyk as…
/** 题目:hdu6143 Killer Names 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6143 题意:有m种字符(可以不用完),组成两个长度为n的字符串,要求这两个字符串含有的字符没有相同的. 求有多少种方式组成这两个字符串. 思路:容斥+排列组合 反思一开始以为这题是dp,然后想了很久没想出来,觉得挺不好处理的,,能力不足. 后来想到是容斥. f[n][1]表示长度为n的字符串用1种字符填充的方法数. f[n][2] = 2^n -…
组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中. 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数. 然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为 “01”组合,同时将其左边的所有“1”全部移动到数组的最左端. 当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得 到了最后一个组合. 例如求5中选3的组合: 1   1   1   0   0   //1,2,3 1…
题意:10000组数据 问一个数n[1,1e12] 在k进制下有末尾0的k的个数. 思路:题意很明显,就是求n的因子个数,本来想直接预处理欧拉函数,然后拿它减n就行了.但注意是1e12次方法不可行.而一般的求因子显然也太慢,所有要想另一个办法.已知任意数可以分解成几个质因数幂的乘积,所以求出n所有的质因数和它的指数再进行排列组合就可以得到答案了. #include <stdio.h> #include <iostream> #include <string.h> #in…