组合数学
流年冲淡时光
这个作者很懒,什么都没留下…
展开
-
lucas定理解决大数组合问题
数论Lucas定理是用来求 c(n,m) mod p的值,p是素数(从n取m组合,模上p)。描述为:Lucas(n,m,p)=cm(n%p,m%p)* Lucas(n/p,m/p,p)Lucas(x,0,p)=1;而cm(a,b)=a! * (b!*(a-b)!)^(p-2) mod p也= (a!/(a-b)!) * (b!)^(p-2)) mod p这里,其实就是直翻译 2015-03-23 19:39:31 · 678 阅读 · 0 评论 -
UVA10123木板上放石头使木板平衡,递归加强剪枝
渣渣表示物理没学好,读完题的第一感觉是题意读错了,又反复读了好几遍,才感觉没读错,只不过物理没学好,感觉取一个石头是不可能平衡的,然而是可以的,因为有俩个支点,又不是一个,然后怎样去保持平衡,以左边支点分析,右边支点忽略,如果左边的力矩大于右边的力矩加上1.5乘于木板的总重量,这里为什么要加这个东西,不理解,后来想了很久,另外咨询了我们班学霸,这里相当于把木板的总重量抽象为在木板中原创 2015-10-06 23:27:26 · 512 阅读 · 0 评论 -
HDU5496求整数序列的子串的并集和,map的简单使用
脑子笨想了好久才想懂这题是怎么回事,首先自己比赛的时候受上一场的BC的影响,感觉和上一场的C题类似,想都没想就直接开撸了,然后后来发现自己理解错题意了,这里就是按照题解说的来做的。考虑每个数字对最终答案的贡献. 对于每个数, 我们只算它出现在连续相同元素的第一个时的贡献, 这样会使计算简便很多. 假设这个数是a[i]a[i], 那么i后面的随便选有2^{n-i}2n−i种.原创 2015-10-04 18:58:53 · 735 阅读 · 0 评论 -
UVA165连续邮资问题
这题由于大神题解写的比较详细,所以copy一下,原文链接:http://blog.csdn.net/shuangde800/article/details/7755452题目大意:某国家发行k种不同面值的邮票,并且规定每张信封上最多只能贴h张邮票。 公式n(h,k)表示用从k中面值的邮票中选择h张邮票,可以组成面额为连续的1,2,3,……n, n是能达到的最大面值之和。例如当h=3,k原创 2015-10-02 22:12:31 · 605 阅读 · 0 评论 -
HDU5482给大小为k的字符集,求长度为n且有m个非空字串的串数目,构造
这题,起初看题解,以为要求贝尔数,后来看大神的代码看了很久很久才发现,并不是求什么贝尔数,什么斯特林数,就是一个构造题,记住一句话,名字只是一个代号。然后大神的代码,由于自己太弱,也看了很久很久才看懂,解释下各个变量的意思,sum数组:字符串长度为n且有s个不同字符构成的子集数目为t的串有多少。a数组是你要构造的长度为n的串,每一位都是一个数字,可能相同可能不同,取决于下面的最后面原创 2015-10-01 19:57:45 · 822 阅读 · 0 评论 -
小白书之困难的串回溯
如果一个字符串包含俩个相邻的重复子串,则称它是“容易的串”,其他串称为"困难的串“,输入正整数N和L,输出由前L个字符组成的,字典序第k小的困难的串。我们只需要判断当前串的后缀,而非所有的子串是否满足条件即可.#include#include#include#include#include#include#include#include#include#include原创 2015-09-11 21:20:23 · 581 阅读 · 2 评论 -
小白书之求无重复元素集合的子集
1:增量构造法:一次选出一个元素放到集合中。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace st原创 2015-09-11 18:49:31 · 556 阅读 · 0 评论 -
小白书之回溯法求素数环
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace std;const int N=101;int A[原创 2015-09-11 20:14:30 · 478 阅读 · 0 评论 -
小白书之八皇后问题回溯法
恰好每行每列各放置一个皇后。如果用C[x】表示第x行皇后的列编号,则问题变成了全排列生成问题;不加剪枝,直接利用横纵坐标判断是否和法:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#in原创 2015-09-11 19:42:38 · 324 阅读 · 0 评论 -
小白书之求排列
生成1—n的排列:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace std;const int N=原创 2015-09-11 17:03:14 · 312 阅读 · 0 评论 -
HDU5297莫比乌斯函数,容斥原理从1到n中数字中去掉形如a^r的数字
#include#include#include#include#includeusing namespace std;const __int64 mx=2000000200000000000LL;vector data[63];bool prime[63]={false,false,true,true,false,true,false,true,false,false,false翻译 2015-07-25 09:18:17 · 449 阅读 · 0 评论 -
hdu5289RMQ求区间最大最小值和单调队列维护区间最大最小值
RMQ和单调队列都可以求区间最大最小值,但相对来说,单调队列更快一些RMQ代码:枚举左端点,二分右端点。#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define LL long longc翻译 2015-07-24 08:46:35 · 661 阅读 · 0 评论 -
cf554题意的理解和组合问题
这题当时做的时候不是很理解题意,就撸了一发卢卡斯定理,结果不对,后来理解了好久还是不理解那句话,百度了题解,发现是第i中颜色的最后一个后面必须是i+1种颜色,然后剩下的就是组合问题,#include#include#include#include#include#define LL long longusing namespace std;LL c[1005][1005];翻译 2015-07-12 19:09:44 · 343 阅读 · 0 评论 -
UVA11174vector实现树的搜索和使用逆元求a/b%n
考虑一棵以C为根的子树,cj为其孩子,首先每棵以孩子节点为根的子树的排列是相互独立的,满足乘法原理,所以在不考虑子树之间的排列时排列总数为∏f(cj),再考虑吧所有的子孙穿插起来(其中每棵子树子孙的相对位置不变)的排列数,这相当于有重复元素的全排列,所以f(C) = f(c1)*f(c2)...f(cj)*(s(C)-1)!/(s(c1)!s(c2)!...s(cj)!),通过递归式的求解可以翻译 2015-05-07 21:10:01 · 442 阅读 · 0 评论 -
uva11137递推和DP其实有些类似
这道题大白书上是按递推讲的:分析:建立多段图。节点(i,j)表示“使用不超过i的整数的立方,累加和为j”这个状态,设d(i,j)为从(0,0)到(i,j)的路径条数,则最终答案为d(21,n)(因为对于题目范围,22*22*22>n)。这个多段图的特点是每个结点一步只能走到下一个阶段的结点,因此我们可以一个阶段一个阶段的计算,代码如下。#include#include#in翻译 2015-05-06 20:41:23 · 492 阅读 · 0 评论 -
UVA146生成可重集的下一个排列
懒得写函数调用了,直接调用函数库多省劲。原创 2015-09-18 16:22:28 · 389 阅读 · 0 评论