数学——组合数学
文章平均质量分 77
XDU_Skyline
Everything is over, everything is just beginning.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
例题10-8 密码 UVa1262
1.题目描述:点击打开链接2.解题思路:本题是经典的解码问题,根据题意,可以事先找出每一列的公共元素,计算出每一列的“梯度”,即从某一列的第一个公共字母跳到下一个要经历多少种排列数。由梯度即可推出密码。本题需要注意的是:1.判断公共元素时事先放到set中,防止重复添加元素。2.计算梯度时为了方便后续处理,可以令i处的梯度等于从第i列到最后一列所有的排列数。详细过程见代码注释地方。(凡是“注意”原创 2015-02-25 23:00:41 · 667 阅读 · 0 评论 -
HDU 1496 Equations
1.题目描述:点击打开链接2.解题思路:本题利用Hash技术+双向查找解决。可以先计算出a*x0*x0+b*x1*x1的所有可能结果,然后再查找-(c*x2*x2+d*x3*x3)的个数,由于每个值都有2种情况,因此一共有16种组合,最终统计出个数后还要乘以16。存储前一半的所有可能的结果可以有多种方法,可以使用STL中的set或者multiset,也可以自己写一个Hash函数,将所有结果和一原创 2015-08-10 11:34:11 · 666 阅读 · 0 评论 -
例题1.8 彩色立方体 UVa1352
1.题目描述:点击打开链接2.解题思路:本题要求重涂尽量少的一些面,使得n个立方体完全相同。看上去很棘手的一个问题。第一种想到的方法就是暴力搜索。但首先要弄明白的一个问题是:一个正方体有几种不同的旋转方式?如果我们选择一个面作为顶面,有6种选法;接下来选一个面作为前面,有4种选法,此时该正方体的“姿态”就确定了,根据乘法原理,一共有6*4=24种姿态(这里用姿态代指旋转方式,一种姿态就是一种旋原创 2015-03-12 16:38:42 · 755 阅读 · 0 评论 -
HDU 5000 Clone (2014年鞍山赛区网络赛D题)
1.题目描述:点击打开链接2.解题思路:本题利用动态规划解决。首先需要一点点的推导,即什么情况下两个克隆体可以共存,假设A,B两个克隆体可以共存,必然有一个属性A大于B,而另一个A小于B,直观上感觉:如果他们的属性值的和sum相同的话,就一定可以共存。这一点很容易证明。 第二点,两个sum值不相同的克隆体能共存吗?显然也是可以的。然而当所有的sum值相同的克隆体都组成一类的话,原创 2015-08-07 14:47:15 · 682 阅读 · 0 评论 -
例题6.22 食物分配 UVa10498
1.题目描述:点击打开链接2.解题思路:本题是一道线性规划题,利用单纯形法解决。具体过程见代码。3.代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#inclu原创 2015-09-02 23:48:55 · 854 阅读 · 0 评论 -
例题6.21 超级扑克 II UVa12298
1.题目描述:点击打开链接2.解题思路:本题利用母函数+FFT解决。根据题意,我们可以构造4个母函数,每个母函数都代表一种花色含有哪些牌,比如,黑桃如果有4,6,8,14这4张牌,那么对应的母函数就是x^4+x^6+x^8+x^14。同理可以得到其他的三个花色的母函数,接下来就是把这4个多项式相乘,那么相乘后x^r项的系数就是这4种当中各选一种之和为r的所有方案数。其中多项式相乘可以用FFT加原创 2015-09-02 16:46:54 · 648 阅读 · 0 评论 -
例题2.9 最大公约数之和 UVa11426
1.题目描述:点击打开链接2.解题思路:本题利用线性筛+打表解决。设f(n)=gcd(1,n)+gcd(2,n)+...+gcd(n-1,n).那么最终的答案就是S(n)=f(2)+f(3)+...+f(n)。因此,只需要快速计算f(n),即可递推得到所有答案。注意到gcd(x,n)是n的约数,我们不妨利用约数来分类计数。令g(n,i)表示gcd(x,n)=i且x3.代码://#pra原创 2015-08-23 00:01:43 · 994 阅读 · 0 评论 -
#317 (div.2) C. Lengthening Sticks
1.题目描述:点击打开链接2.解题思路:本题利用减法原理解决。比赛时候暴力枚举果断超时==。正确的做法是用总体方案-不合理的方案数。显然,总体方案的个数等价于求解x1+x2+x3+x4=l的非负整数解的个数,利用组合数学的结论等于C(l+4-1,4-1)=C(l+3,3)。其中x4表示没有使用的长度,它从0取到l。接下来就是考虑不合理的方案数目。我们先考虑让a增加一个La,变成a+La,我们令原创 2015-08-23 11:19:07 · 880 阅读 · 0 评论 -
HDU 5468 Puzzled Elena (2015年上海赛区网络赛A题)
1.题目描述:点击打开链接2.解题思路:本题利用dfs序+容斥原理+前缀和性质解决。题目中要求每个结点,和多少个它的子结点互素。如果每次为了求一个点去跑一遍dfs,复杂度将是O(N(N+M))。一定会超时。因此需要深入加以分析。注意到n的范围是10^5以内的,因此可以事先用线性筛求出每个数含有哪些素因子。接下来,我们尝试利用dfs序来求解。设num[i]表示遍历到当前结点时候,含有因数i(注意原创 2015-10-01 22:54:53 · 699 阅读 · 0 评论 -
UVa11038 How Many O's?
1.题目描述:点击打开链接2.解题思路:本题要求统计区间[m,n]中0出现的次数。可以利用加法原理,乘法原理来解决。不妨设solve(x)表示区间[0,x]中,0出现的次数。那么该如何计算这个函数呢?我们可以考虑逐位统计。设当前在第cur位,那么cur左边的数构成一个整数left,cur右边构成的整数为right,位数为k。根据乘法原理,如果第cur位不是0,那么left可以取[1,left]原创 2015-10-12 16:08:03 · 407 阅读 · 0 评论 -
LA 5092 Permutation Counting
1.题目描述:点击打开链接2.解题思路:本题就是Eulerian Number,《具体数学》中有讲解。也可参考维基百科中的链接:点击打开链接 设f(n,k)表示1~n的排列中有k个欧拉数的方案数。那么有如下递推式:f(n,k)=(1+k)*f(n-1,k)+(n-k)*f(n-1,k-1);不含n的排列中:如果在该排列的升序或者该排列的开始位置插入n,那么k值不变。如果在降序或者最后位原创 2015-10-13 12:07:46 · 530 阅读 · 0 评论 -
LA 4064 Magnetic Train Tracks
1.题目描述:点击打开链接2.解题思路:本题利用减法原理解决。根据题意,我们可以尝试寻找钝角三角形的个数,那么只需要从C(n,3)中把这部分减掉,就是最后的答案了。注意到钝角三角形的特点是最大的角度大于90度小于180度。我们可以先让每个点都当做一次坐标原点,计算出其他点相对于该点的极角,并把这n-1个从小到大排序,那么非法的情况实际上是介于(90,270)之间的极角,这个很容易通过二分搜索查原创 2015-10-12 23:46:19 · 388 阅读 · 0 评论 -
UVa5846 Neon Sign
1.题目描述:点击打开链接2.解题思路:统计每个点的黑色边ai,那么结果就是C(n,3)-0.5*sum{A{i]*(n-1-A{i])}。3.代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#i原创 2015-10-12 22:19:55 · 465 阅读 · 0 评论 -
LA3357 Pinary
1.题目描述:点击打开链接2.解题思路:本题要求找第k个满足题意的01串。演算后会发现,每一位的1首次出现的下标恰好就是斐波那契数列,比如,第0位的1在第1次出现,第1位的1在第2位出现,第2位的1在第3次出现,第3位的1在第5次出现。。这样,我们可以提前预处理出来这个位置数组。接下来,只需要不断地查找刚刚不超过k的那个位置p,则这一位就是1,并且更新k=k-a[p]。其中a[p]就是第p位的原创 2015-10-14 00:27:32 · 471 阅读 · 0 评论 -
#309 (div.2) A. Kyoya and Photobooks
1.题目描述:点击打开链接2.解题思路:本题实质上在问:给定一个长为L的字符串,在26个字符中选一个字符插入该串,可以形成多少个新的字符串。这就是一个简单的计数问题,长度为L的字符串有L+1个空位可以插入,一共有26*(L+1)个方法,考虑到相同字符的情况,要减去一个,一共有L种重复的情况,因此最终有26*(L+1)-L=25*(L+1)+1种情况。3.代码:#define _CRT_原创 2015-07-02 11:49:15 · 786 阅读 · 0 评论 -
例题2.1 象棋中的皇后 UVa11538
1.题目描述:点击打开链接2.解题思路:本题利用加法原理解决。本题要求统计有多少种放置方法,可以使两个皇后相互攻击。因为只有2个皇后,而能够相互攻击的情况只有3种:同一行,同一列,同一对角线。这3种情况都没有交集,因此可以使用加法原理。设三种情况对应的方案数分别为A(n,m),B(n,m),D(n,m)。下面讨论如何计算这三个值。A(n,m)的计算可以利用乘法原理:首先选择一格,一共有nm原创 2015-05-19 17:25:09 · 853 阅读 · 0 评论 -
例题2.2 数三角形 UVa11401
1.题目描述:点击打开链接2.解题思路:本题利用代数分析和加法原理解决。根据题目给定的范围,只能使用O(N)级别的算法,直接枚举肯定是会超时的。我们设c(x)表示最大边长为x的三角形的个数。设另外两条边为y,z。根据三角形不等式,有y+z>x。所以z的范围是x-y根据这个不等式,我们可以改变参变量y的值来得到z的个数。当y=1时显然无解。当y=2时,有一个解。当y=3时,有2个解。。。直到原创 2015-05-19 17:41:08 · 738 阅读 · 0 评论 -
例题10-22 统计问题 UVa1640
1.题目描述:点击打开链接2.解题思路:本题要求数从a到b这串数字中0~9这10个数的个数。这类问题的一般步骤都是先用f(n,d)计算出0~n中d数字出现的次数,那么答案就是f(b,d)-f(a-1,d)。计算f(n)函数时,可以考虑递推法计算,下面举例解释计算过程:比如1~2974这个序列,将它拆成1~2970和2971~2974两部分,后者就是个位从1到4,这4个数字先各出现一次,然后原创 2015-02-26 20:40:14 · 1266 阅读 · 0 评论 -
#295 (div.2) C.DNA Alignment
1.题目描述:点击打开链接2.解题思路:比赛时没有想到好的思路,后来才发现,只需要t串中的字符是s串中出现次数最多的字符即可,根据乘法原理可知:最终结果是pow(num,n),其中num是s串中次数最多的字符的个数。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#in原创 2015-03-02 20:25:47 · 574 阅读 · 0 评论 -
#298 (div.2) C. Polycarpus' Dice
1.题目描述:点击打开链接2.解题思路:本题是一道数学题,很可惜在比赛时候没有注意到最大数的范围,然后被Hack了,瞬间rating变得不忍直视==。还是耐心总结,好好准备下一场比赛吧。本题要求找每个筛子不可能出现的数字的个数。可以通过确定可能值的边界来解决。假设所有筛子出现的数字之和是tot,那么每个筛子的最大范围是min(A-(n-1),num[i]),即当其他筛子都取1时的情况和筛子i自原创 2015-04-13 10:34:22 · 640 阅读 · 0 评论 -
习题10-15 零和一 UVa12063
1.题目描述:点击打开链接2.解题思路:本题利用数位dp解决。即通过寻找数位上的递推式来加以解决。从样例可知,如果只是一个个的枚举,时间上肯定是承受不了的,必须通过寻找递推式来加以解决。通过观察,我们发现,如果一个整数n能够被k整除,即n%k==0,假如这个数的二进制形如1XXX这样的二进制,也就意味着二进制数1000的值模k的余数和二进制数XXX的值模k的余数之和正好为0。这样的话我们设d(原创 2015-04-23 19:38:22 · 1164 阅读 · 0 评论 -
习题10-5 不同素数之和 UVa1213
1.题目描述:点击打开链接2.解题思路:本题利用加法原理解决,设第k次累加之和为数字n的方案有d(n,k)种,那么不难得到如下递推式:d(n,k)=sum{d(n-pi,k-1)}(n-pi≥0)其中pi代表第i个素数,这不难理解,假设第k-1次累加后数字之和为n-pi,方案有d(n-pi,k-1)种,第k次只有一种方案,就是加上pi。那么根据乘法原理知道,最后一步加上pi而得到数字n原创 2015-04-20 17:26:42 · 1383 阅读 · 1 评论 -
习题10-21 二项式系数 UVa1649
1.题目描述:点击打开链接2.解题思路:本题利用枚举+二分解决。问题的关键是选对枚举对象,因为要找C(n,k)=m,如果枚举n的话,一旦m非常大,枚举n就会十分困难。因此枚举对象应为k。根据组合数的性质易知,C(n,n/2)时是最大值,C(n,1)是最小值。由于固定的是k,因此n=2*k时是最小的范围,n=m是最大的范围,这样,即可通过二分法来寻找n。本题有一个技巧,即在计算组合数时候,不原创 2015-05-01 23:28:09 · 1180 阅读 · 0 评论 -
#295 (div.2) E.Pluses everywhere
1.题目描述:点击打开链接2.解题思路:本题是一道组合数学题,一开始用递归的思想做,但结果错误。学习了别人的解法后,豁然开朗。正确的解法是关注每一位数对整体的贡献值。比如输入的n位数是D1D2D3...D(n-1)D(n),那么当D(i)作为个位数时,它的前面必然有一个‘+’。剩下的k-1个‘+’被安置在剩下的n-2个空隙中,因此一共有C(n-2,k-1)种情况,D(i)的总贡献值是D(i)*原创 2015-03-06 23:57:44 · 995 阅读 · 0 评论 -
2.2 立方数之和 UVa11137
1.题目描述:点击打开链接2.解题思路:本题利用递推关系解决。建立一个多段图,定义状态d(i,j)表示“使用不超过i的整数的立方,累加和为j”的方案数。那么根据加法原理,如果没有选择数字i的立方和就得到了j,那么方案数就是d(i-1,j);如果选择了数字i的立方和才得到了j,那么方案数是d(i,j-i^3)。即:d(i,j)=d(i-1,j)+d(i,j-i^3);这个递推式还可以降低原创 2015-05-19 20:10:01 · 1008 阅读 · 0 评论 -
排列之和 UVa11076
1.题目描述:点击打开链接2.解题思路:本题利用平均数的思想解决。由于每个数出现在任何一位的总的次数都是相同的,因此可以等效为它们的平均数出现的次数,而出现的次数就是重复排列的组合数,最后再乘以n个1即可得到答案。比如一个序列是{1,1,2},那么平均数就是(1+1+2)/3=4/3。出现的次数就是P(3,3)/P(2,2)=3,一共有3个1,那么ans=(4/3)*3*111=444。3原创 2015-05-22 11:19:37 · 1195 阅读 · 0 评论 -
组队 UVa11609
1.题目描述:点击打开链接2.解题思路:首先选择一个人当队长,有n种选法;对于每一个队长,剩下的可以有0,1,2,...n-1个人,一共有2^(n-1)种情况。答案就是n*2^(n-1)。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#include#include原创 2015-05-22 11:33:03 · 710 阅读 · 0 评论 -
回文数 LA2889
1.题目描述:点击打开链接2.解题思路:本题利用构造法解决。首先可以事先打表n位回文数的起始数字,每一位的进位数,以及起始数字的序号。这里我们用base数组存放起始数字,st数组存放起始数字的序号,e数组存放进位数。那么对于每一个n,我们都可以先确定它的位数num。如果是起始数字,直接输出即可。否则算出n与st[num]的差值。由于回文数是从中间向两边逐渐增大的。因此应该从0计算到mid,这个原创 2015-05-22 11:37:04 · 664 阅读 · 1 评论 -
全加和 UVa10943
1.题目描述:点击打开链接2.解题思路:本题实际上就是求x1+x2+...+xk=n的非负整数解的个数。根据组合数学的结论,答案是C(n+k-1,k-1)。可以事先预处理算出所有的组合数。3.代码:#define _CRT_SECURE_NO_WARNINGS #include#include#include#include#include#include#include原创 2015-05-22 10:22:10 · 894 阅读 · 0 评论 -
例题2.3 拉拉队 UVa11806
1.题目描述:点击打开链接2.解题思路:本题利用容斥原理解决。首先我们解决一个简单的问题:如何求解“第一行,最后一行,第一列,最后一列都没有石子”的方案数。这相当于只有m-2行和n-2列,答案为C((m-2)(n-2),k)。那么如果我们可以想办法把本题分解为一系列这个简单问题的线性组合,即可求解出答案。这正是容斥原理的作用。设满足“第一行没有石子”的方案集为A,最后一行没有石子的方案集为原创 2015-05-19 18:28:26 · 892 阅读 · 0 评论 -
UVa10883 Supermean
1.题目描述:点击打开链接2.解题思路:本题是杨辉三角的应用。演算后不难发现,n个数相乘,每一项的系数就是第n-1行对应的杨辉三角的系数。不过考虑到这里的n会非常大,因此不能直接计算出对应的组合数,而是需要事先取自然对数,最后累加答案的时候再恢复出来。3.代码:#include#include#include#include#include#include#include原创 2015-10-13 23:22:10 · 473 阅读 · 0 评论
分享