algorithm_组合数学
文章平均质量分 75
theArcticOcean
Website: https://www.weiy.city
Wechat Subscription Account: 胡桃小院
展开
-
概率练习 (16.04.30)
继之前的概率dp,这次博文同样和概率相关,但不仅仅限于dp处理。UVA - 10288 Couponshttps://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1229 大意:买彩票,图案有n种,如果收集到所有的n种彩票就能得到大奖。问平均情况下需要买多少张彩票?原创 2016-04-30 18:19:25 · 1316 阅读 · 0 评论 -
poj 2356 Find a multiple(鸽巢原理+标记)
题目:http://poj.org/problem?id=2356大意:给出n个数字,在其中找出连续的数字使其和是n的倍数,不能找到输出0。设sum[i]=a1+a2+……+ai,n个sum[i]模n的结果范围是[0,n-1]。由鸽巢原理可知:必有一个sum[i]的模结果是0或有两个sum[i]模结果相等(也就是sum[j]-sum[i]=0)。所以一定存在着这样连续数字的和是n的倍数。N原创 2015-08-03 08:53:23 · 588 阅读 · 0 评论 -
莫比乌斯反演
思想:不直接求解,用一个序列把另一个序列表示出来。定义 f(n)和g(n)是在正整数集合上的两个函数,如果有:那么:其中: 若,那么若,任意两个不同和的为互异素数,那么其它:重点研究mu[]:10以内:1 -1 -1 0 -1 1 -1 0 0在程序设计中的mu[i]就是上面的 与素因子快速筛相关的莫比乌斯求法:in原创 2016-01-17 23:02:26 · 372 阅读 · 0 评论 -
关于Pascal和二项式系数
《Introductory Combinatorics Fifth Edition》学习笔记:关于pascal三角形:Pascal三角形递推函数:将n,k值看做dp数组的二维,由此得到动态规划转移式。将 也可以看做是从的点(0,0)走到其所在位置(n,k)。不过,走法只有两种:从这种图的角度也能理解为什么一行的和是上一行数字和的2倍。同时我们也可以理原创 2016-01-10 10:41:30 · 1845 阅读 · 0 评论 -
棋盘的完美覆盖(多米诺骨牌完美覆盖)&&幻方(魔方阵)
棋盘的完美覆盖:一张8行8列的棋盘一共有64个方格,用一些形状相同的多米诺骨牌覆盖,每一张覆盖相邻的两个方格,没有相互重叠,能用32张这样的多米诺骨牌完全覆盖整张棋盘称为多米诺骨牌完美覆盖或者盖瓦。这样的完美覆盖是存在的,而且不止一种方式,一共有12988816=2^4*17^2*53^2种。那么对于一般的m行n列的棋盘是否存在着多米诺骨牌完美覆盖呢?充要条件是m*n是偶数,这等价于分子物理学原创 2015-07-01 09:22:47 · 6967 阅读 · 0 评论 -
poj 1091 跳蚤(最大公约数原理+容斥原理)
题目:http://poj.org/problem?id=1091跳蚤Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 9058 Accepted: 2709DescriptionZ城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一原创 2015-08-29 20:14:25 · 1145 阅读 · 0 评论 -
不同种类不同个数集合的重复排列——指数型母函数
我们知道多元素的多重集排列是这样的:元素 个数a1 n1a2 n2a3 n3……ak nk其中n=n1+n2+……+nk取出所有的元素,不同的排列情况应该是当不是取出所有元素呢?回想母函数的方法:1g砝码,2g砝码,3g砝码……均有无限个,那么母函数的表达式就是砝码故事的背景是所原创 2016-01-21 23:38:55 · 731 阅读 · 0 评论 -
POJ 1833 排列(后k个排列)
http://poj.org/problem?id=1833大意:给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列1 2 3…n。看见此题,马上联想到《C语言名题精选百则》——整数全排列,当时已经接触了一种生成排列的STL算法——next_permutation()(不要说我太赖,ACM不就是讲究快准狠吗?)此题同样用它,瞬A。#incl原创 2016-01-21 21:28:08 · 760 阅读 · 0 评论 -
整数全排列(旋转法,next_permutation)
读了《C语言名题精选百则技巧篇》中的整数全排列,里面的算法是多样丰富的。看了旋转的基本思路和已经知道的最易用的next_permutation(),自己把两者都实现并且运行了一遍。只有不断学习,观察,猜想,推敲,实践才有可能弄懂算法的奥义。两种方式都产生相同数目的排列,但是次序是不同的。旋转:#include #includeusing namespace std; int原创 2015-05-29 21:59:33 · 1100 阅读 · 0 评论 -
POJ2084 Game of Connections(catalan数)
http://poj.org/problem?id=2084大意:有2n个数字形成一个圆形,直线段连接一对数字,每一个数字必须连接到另一个数字上。(没有相交的线段)分析:现在假设1是要连接的点,它和4相连,为了不破坏规矩——“没有相交的线段",2,3只能在右边的圆形区域进行匹配,4——8也不能越过红线,在三角形中进行连线匹配。设n个点的匹配方案数是h(n),那么中的结果就该原创 2016-01-21 20:29:42 · 602 阅读 · 0 评论 -
Latin方及Hadamard矩阵
Latin方:N个元素在N*N的矩阵中每一行每一列仅仅出现一次。普通Latin方的构造:int g[105][105];void paint(int n){ for(int i=1;i<=n;i++){ g[1][i]=i; } for(int i=2;i<=n;i++){ for(int j=n;j>1;j--){原创 2016-02-09 23:28:50 · 1891 阅读 · 0 评论 -
海明码的生成
海明校验码具有检测错误的能力,同时还具有找出错误所在位置的能力。海明码的编码原理:给出信息,组成信息位:,其余位置填充位置码,海明码由此组成。给定信息. 构建海明码:其中,pi的值由和bi的位置关系决定。我们称pi是校验位,bi是信息位。3=1+2 ——>b15=1+4 ——>b26=2+4 ——>b37=1+2+4 ——>b4那么:hunnu OJ原创 2016-02-10 14:52:50 · 3126 阅读 · 0 评论 -
容斥原理训练 (16.04.10)
这又是一篇训练系列的博文,主题是容斥原理。 题目: UVA 10325 A - The Lottery poj 3904 Sky Code uvalive 7040 color hdu 4059 The Boss on Mars H - Visible TreesUVA 10325 A - The Lotteryhttps://uva.onlinejudge.org/index.php?原创 2016-04-10 20:14:12 · 738 阅读 · 0 评论 -
带有限制条件的第K个排列——CF 513B1、B2
codeforces 513B1 Permutationshttp://codeforces.com/problemset/problem/513/B1大意:求解第K个排列,且排列满足 的值尽可能大。 1 ≤ n ≤ 8分析:数据量小,暴力解决。第K个排列和 next_permutation相关#include #include #include us原创 2016-03-11 21:37:36 · 787 阅读 · 0 评论 -
hdu 4704 Sum (组合+欧拉定理)
http://acm.hdu.edu.cn/showproblem.php?pid=4704大意:给定N,设S(k)是由k个数字相加得到N的方案数,求解分析:本题中两个数字的排列,如1、2 应该有2种——1、2; 2、1(一开始以为它们相同,算作一种,怎么也算不出来)如此以来,容易分析,将数字n看作1+1+1……+1(n个)那么 (组合思维,隔板看待)于是,答案就是原创 2016-03-22 19:32:37 · 744 阅读 · 0 评论 -
hdu 4336 Card Collector (容斥 or dp)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4336大致题意:我们需要收集n张卡片,在每一个袋子里出现卡片对应的概率是pi p_i, 现在求出收集完所有卡片需要袋子数目的期望。分析:最开始自己用容斥做的,从简单的情况入手, 保证收集到卡片1——p1p_1 对应次数:1p1\frac{1}{p_1} 保证收集到卡片2——p2p_2 对应次数:1p2\f原创 2016-04-04 09:47:37 · 618 阅读 · 0 评论 -
组合数学训练 (16.03.29)
复习组合数学的知识,本文主要涉及到母函数,catalan数,容斥原理,排列去重的内容。四道题:hdu 1023 Train Problem IIhdu 5651 xiaoxin juju needs helphdu 1023 Train Problem IIuva 11806 Cheerleaders原创 2016-03-29 21:15:24 · 717 阅读 · 0 评论 -
线性规划之单纯性算法
线性函数:按比例,一阶导数为常数的函数。松弛变量:引入新的变量,且保持变量间的关系不变提到线性规划,最先想起的是高中的各种数学题。线性规划问题的标准形式:用松弛变量技术把不等式化成等式:单纯性算法的思想:从一个基本可行解出发,寻找能使得目标函数更优的拎一个解,迭代下去直到找不到。使用这种方法避免大量的无用比较。例子:从FOREVER284LOVE的《原创 2016-02-04 23:49:50 · 7150 阅读 · 0 评论 -
置换与Polya 计数原理-应用部分
下面的代码只是先写出来,还没有用过。// polya定理 求解循环节数const int N=1e3+10;int per[N];bool vis[N];int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int polya(int n){ int pos,sum=0; memset(vis,0,sizeof(vis)原创 2016-01-30 15:50:25 · 879 阅读 · 0 评论 -
置换与Polya 计数原理-理论部分
背景:一个正方形用红色和蓝色涂色给顶点涂色,方案有多少种呢?如果不考虑对称,答案就该是2^4=16,考虑对称,结果就该是:一共六种。Polya定理就是研究这样的分布问题。定义一一映射关系 假设有: 那么推广映射关系:定义恒等排列:我们有: 关于f的逆排列:设第一行和第二行互换:然后第一行以自然数的顺序排列:有:原创 2016-01-29 20:32:47 · 1913 阅读 · 0 评论 -
排列、R子集字典序
n个元素的集合排列总个数是n!,可以这样简单的理解它:当只有1个元素时,排列数是1,插入一个元素有两种方法,所以f(2)=2对于3个元素相当于是在两个元素的基础上再插上1个元素:f(3)=f(2)×3=2×3这样推导下去:f(n)=1×2×3×……×n=n!有N个元素的集合{1,2,3,……N},当N非常大时,有这样的结果:由逆序数$a_{1},a_{2},\cdo原创 2015-10-20 15:15:10 · 1619 阅读 · 0 评论 -
catalan数
catalan数是组合数学中计算问题的一种数列。设h(0)=h(1)=1,它满足递推式:h(n)=h(0)h(n-1)+h(1)h(n-2)+……+h(n-1)h(0) (n>=2)另类递归式:通项公式(解): (n=1,2,3……)相关问题:hdu 1023 Train Problem IIhttp://acm.hdu.edu.cn/show原创 2016-01-21 11:13:53 · 1107 阅读 · 0 评论 -
stirling 数
组合数学中的stirling数有两类,第一类,数字有正负,绝对值是包含n个元素的集合分作k个环排列的方法个数;第二类是把包含n个元素的集合划分成k个非空子集的方法的数目。第一类stirling数递推公式:S(n,0)=0S(1,1)=1S(n,k)=S(n-1,k-1)+(n-1)S(n-1,k)对于第一类stirling数递推关系的理解:第n个元素单独一个环时其他原创 2016-01-21 08:33:30 · 923 阅读 · 0 评论 -
组合与排列的表达:pascal三角形和母函数
杨辉三角和母函数都能表达不同问题的组合结果,杨辉有利于打表存储且运算快,母函数则能更好体现了组合的思想和过程。已知C(n,m)=A(n,m)/m!=n!/(n-m)!/m!,对于如下的n和m:3 25 39 510 516 820 10约定: 1杨辉三角:#include #includeusing namespace std;typedef long l原创 2015-07-16 20:40:27 · 879 阅读 · 0 评论 -
多重集合的排列与组合
《Introductory Combinatorics Fifth Edition》学习笔记:多重集合的排列:设S是有k种不同类型对象的多重集合,每个元素都有无限的重复数。那么s的r排列数目是k^r.例子:最多有4位的3进制数(3元数)的个数是多少?分析:3^4=81。设s是多重集合,有k种类型的对象,且每种类型的有限重复数是n1,n2,……,nk。s的大小是n=n原创 2015-07-07 20:55:55 · 6301 阅读 · 0 评论 -
四个基本的计数原理
四个基本计数原理:@加法原理:设集合s划分为两两互不相交的各个部分s1,s2,s3……sn,那么s的元素总个数等于各个部分的总个数之和。即|s|=|s1|+|s2|+……+|sn|.(如果允许子部分相交,则需要用容斥原理来解决)使用加法原理的技巧是:把原集合分割成容易处理的少量子集。例子:一名学生想要选修一门数学课程和一门计算机的课程,数学课程有三门可供他选择,计算机课程有四门可以选择,那原创 2015-07-07 09:23:54 · 5181 阅读 · 1 评论 -
集合的排列与组合
排列和组合的区别在于放置和选择是否和顺序有关。集合的排列:n元素集合的r排列A(n,r)=n*(n-1)*(n-2)……(n-r+1)=n!/(n-r)!集合的组合:n元素集合的r组合C(n,r)=n!/(n-r)!/r! [组合不考虑顺序]问题:将26个英文字母排序,要求a,e,i,o,u任意两个不能连续出现,这样的排序有多少个?分析:26个英文字母的总排序数是A(26,26)=原创 2015-07-07 15:38:23 · 1699 阅读 · 0 评论 -
hdu 2110 Crisis of HDU(母函数)
题意:http://acm.hdu.edu.cn/showproblem.php?pid=2110组合问题,需要用到母函数,但是x的指数是由题意决定的,而且是不断变化的。这就需要灵活的使用母函数,而且涉及到取模,不要忘了。#include #include#includeusing namespace std;int c1[10005],c2[10005];int main(原创 2015-06-15 19:57:23 · 496 阅读 · 0 评论 -
hdu 1398 Square Coins(母函数)
题意:http://acm.hdu.edu.cn/showproblem.php?pid=1398母函数的基本应用,算作练习吧。#include #includeusing namespace std;// s(x)=(1+x+x^2+x^3+---+x^n)(1+x^4+x^16+---+x^n)---(1+x^289).int c1[305],c2[305];int a[原创 2015-06-14 19:41:53 · 453 阅读 · 0 评论 -
hdu 1709 The Balance(母函数)
题意:http://acm.hdu.edu.cn/showproblem.php?pid=1709组合问题,应用母函数,需要注意的是每种不同的砝码只有一个,可以相加,可以相减。所以,s(x)=(1+x^a)(1+x^b)(1+x^c)---(1+x^z)。#include #include#includeusing namespace std;int a[105];int c原创 2015-06-15 22:31:39 · 519 阅读 · 0 评论 -
母函数初识
母函数,一种用于解决拆分,组合问题的手段,实现了用简单的四则计算在计算机中模拟复杂的组合过程。对于应用:5拆分成1,2,3,4的和的情况一共有多少种? 实现代码:#include using namespace std;int c1[100],c2[100];int main(){ int i,j,k,n=5; for(i=0;i<=n;i+原创 2015-06-10 17:17:23 · 498 阅读 · 0 评论 -
指数型母函数&&hdu 2065 "红色病毒"问题
常用的指数型母函数:e^x=1+x/1!+x^2/2!+x^3/3!+…… e^(-x)=1-x/1!+x^2/2!-x^3/3!+……指数型母函数用于解决多重集合的排列问题,g(x)=p(n,0)+p(n,1)x+p(n,2)x^2/2!+p(n,3)x^3/3!+……+P(n,n)x^n/n!=C(n,0)+C(n,1)x+C(n,2)x^2+C(n,3)x^3+……+C(n,n)x原创 2015-07-16 16:10:17 · 844 阅读 · 0 评论 -
hdu 1695 GCD (欧拉函数+容斥原理+线性筛法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1695GCDTime Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7605 Accepted Submission(s): 28原创 2015-08-26 20:23:25 · 723 阅读 · 0 评论 -
又见母函数
今天遇到了几道母函数的题,回忆回忆组合数学的知识。。。hdu 1028 Ignatius and the Princess IIIhttp://acm.hdu.edu.cn/showproblem.php?pid=1028大意:N=a[1]+a[2]+a[3]+...+a[m]; 求解整数N的拆分方案数分析:和母函数的砝码故事很像,使用母函数。#include #i原创 2016-01-20 13:31:21 · 539 阅读 · 0 评论 -
C语言名题精选百则:所有子集,字典子集,Gray子集
C语言名题百则 3.1 列出所有子集 (direct.c)分析:每一个元素只有两种可能,在子集中和不在子集中。#include #include using namespace std;int p[20],top;int main(){ int n; while(cin>>n){ for(int i=0;i<(1<<n);i++){原创 2015-10-18 09:30:57 · 941 阅读 · 0 评论 -
1205 吃糖果(鸽巢原理)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1205吃糖果Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 28707 Accepted Submission(s): 817原创 2015-09-06 22:46:47 · 636 阅读 · 0 评论 -
hdu 3509 Buge's Fibonacci Number Problem(矩阵乘法+二项式)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3509Buge's Fibonacci Number ProblemTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 726原创 2015-08-16 20:34:47 · 839 阅读 · 0 评论 -
hdu 4135 Co-prime(容斥原理)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4135大意:求区间[a, b]内与n互质的数的个数。分析:单纯来逐个判断互质统计结果肯定会超时,那么可以对n素因子分解,以素因子的个数作为循环的上界(第二层循环),第一层是枚举素因子,运用容斥原理来统计不互质的个数,最后再用总数减去不互质的个数就是互质的个数。【容斥原理也就是提供了这样间原创 2015-08-03 10:10:24 · 486 阅读 · 0 评论 -
UVA 10325 The Lottery(容斥原理)
题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=32762大意:求1~n中不能被给定m个数中任意一个数整除的数的个数避免超时使用容斥原理来间接求解。其中需要注意的是2,4; 6,8这样的数字#include #includeusing namespace std;const int maxn=1e6+1原创 2015-08-03 11:03:32 · 559 阅读 · 0 评论 -
鸽巢原理(Pigeonhole Principle)
鸽巢原理(Pigeonhole Principle)的基本定理:If n + 1 objects are distributed into n boxes, then at least one box contains two or more of the objects.一个简单的例子:13个人里至少有两个人的生日是同一月的。鸽巢原理的相关原理: If n objects are p原创 2015-07-22 21:16:10 · 6128 阅读 · 0 评论