随笔分类 -  算法总结

摘要:主要填补知识漏洞:一、母函数分析法(1)普通母函数 在考虑“当投掷n粒骰子时,加起来点数总和等于m的可能方式的数目”这个问题时首先使用了母函数方法,并得出可能的数目是的展开式中项的系数。 典型模型:砝码称重 特点:求某个解权重之和的解数 例题:有1,2,3g的砝码各一个,称出质量为3的砝码,有几种组合方法。 G(x)=(1+x)(1+x^2)(1+x^3) 答案是x^3的系数。因为幂函数相乘指数相加。 拓展:若是3种砝码有无数种 G(x)=(1+x+x^2+x^3+x^4....)(1+x^2+x^4+x^6....)(1+x^3+x^6+x^9...) 同样答案... 阅读全文
posted @ 2014-04-01 22:40 little_w 阅读(879) 评论(0) 推荐(0)
摘要:(主要是各基本知识点的例题,查缺补漏,希望以后比赛不要有本来应该掌握的知识点,却不知道的情况)1、一元线性同余方程组的一般性解法(拓展gcd、剩余定理) 1 /*poj2891*解一次线性同余方程组/ 2 /x%a[i]==r[i]*/ 3 /*通解*/ 4 #include 5 #include 6 #include 7 #define maxn 10000+5 8 #define LL long long 9 using namespace std;10 LL r[maxn],m[maxn];11 12 void Ex_gcd(LL a,LL b,LL &d,LL &x,L 阅读全文
posted @ 2014-03-18 09:57 little_w 阅读(297) 评论(0) 推荐(0)
摘要:部分参照:From:http://blog.csdn.net/jarjingx/article/details/8521690综述:每个条件的形式都是x[i]为真/假或者x[j]为真/假,每个x[i]拆成2*i和2*i+1两个点,分别表示x[i]为真,x[i]为假;加的每一条边之间的关系是and模型一:两者(A,B)不能同时取(但可以两个都不选)说明:A为假或B为假那么选择了A就只能选择B’,选择了B就只能选择A’连边A→B’,B→A’模型二:两者(A,B)不能同时不取(但可以两个都选)说明:A为真或B为真那么选择了A’就只能选择B,选择了B’就只能选择A连边A’→B,B’→A模型三:两者(A 阅读全文
posted @ 2014-03-07 01:39 little_w 阅读(289) 评论(2) 推荐(0)
摘要:1 /*LA3211 2 2-sat+二分答案 3 现在统一建模的方式: 4 1、同一组的两个状态分别存储在2*i和2*i+1两个节点,产生2*n个节点 5 2、for(int i=1;i 15 #include 16 #include 17 #include 18 #include 19 #include 20 #include 21 #include 22 #include 23 #include 24 #include 25 #include 26 #include 27 #include 28 #include 29 #define INF 0x... 阅读全文
posted @ 2014-03-07 00:41 little_w 阅读(210) 评论(0) 推荐(0)
摘要:from:http://www.cnblogs.com/jbelial/archive/2011/08/08/2131165.html1. 1 累加和求重心设平面上有N 个离散数据点( xi , yi ) ( i = 1, 2, ., n) , 其多边形重心G( . x1, . y1) 为: 这是求多边形最简单直观的方法。可以直接利用离散数据点的x, y坐标就能求图形重心。但是缺陷在于没有对离散数据点所围图形做任何处理和分析,精度不够。1. 2 算法一:在讲该算法时,先要明白下面几个定理。定理1 已知三角形△A1A2A3的顶点坐标Ai ( xi , yi ) ( i =1, 2, 3) ... 阅读全文
posted @ 2014-03-04 22:10 little_w 阅读(493) 评论(0) 推荐(0)
摘要:from:http://blog.csdn.net/hanchengxi/article/details/8639476一、目录一些历史:1978年, M.I. Shamos's Ph.D. 的论文"Computational Geometry"标志着计算机科学的这一领域的诞生。 当时他发表成果的是一个寻找凸多边形直径的一个非常简单的算法, 即根据多边形的一对点距离的最大值来确定。后来直径演化为由一对对踵点对来确定。 Shamos提出了一个简单的O(n)时间的算法来确定一个凸n角形的对踵点对。 因为他们最多只有 3n/2 对, 直径可以在O(n)时间内算出。如同To 阅读全文
posted @ 2014-03-04 01:10 little_w 阅读(2116) 评论(0) 推荐(0)
摘要:一、静态最优查找树概念:1、首先明确静态树的概念。查找过程中树的结构不发生改变。2、假设每个点要求被查找的概率是p[i],权值为C[i],这里可以理解为查找到时的层数;3、PH=sigm{P[i]C[i]}4、PH最小的树是静态最优查找树;缺点:花费的时间代价比较高优化方法:次优查找树二、次优查找树构建方法:1、假设一个按关键字有序的记录序列(r[l],r[l+1]........r[h])相应的权值是w[i]2、P[i]=|sum(w[l]+w[l+1]....w[i])-sum(w[i+1]+w[i+2]+w[i+3].....+w[h])| O(n)的复杂度记忆化实现取值最小的P[i], 阅读全文
posted @ 2013-11-25 13:54 little_w 阅读(2108) 评论(0) 推荐(0)
摘要:并查集:我们知道p[x]中存储的是x的根节点,或者说,我们要的目的是所有在一棵树上的节点,他们的p[x]必须是相同的并查集的代码很简单,但在使用时很难达到上述结果,或者说,稍有不慎,就会出错。也许你会说我只要判断find(i)==find(1)都成立就好了,但这往往只能判断一个连通集的问题。所以具体的方法是什么?我们先描述方法,再证明。步骤:int find(int x){return x==p[x]?x:p[x]=find(p[x]);}read(u,v);f1=find(u);f2=find(v);if(f1!=f2) p[f2]=f1;for(i=1;i13423结果: x 1 2 .. 阅读全文
posted @ 2013-10-24 12:46 little_w 阅读(136) 评论(0) 推荐(0)
摘要:double func(double a, double b, double x) { double r = a * exp(- x*x) + b * sqrt(x); return r*r;//return的积分常数,例如这里f(x*x)dx|[0,h]}double integrate(double a, double b, double h) { unsigned long steps = 1, it = 1; double V = h * (func(a, b, 0) + func(a, b, h)) / 2.0; double Vold; do { double t... 阅读全文
posted @ 2013-10-20 17:03 little_w 阅读(402) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2013-10-04 00:12 little_w 阅读(378) 评论(0) 推荐(0)
摘要:Description zzy今天刚买了两个水瓢A和B,容量都是为1升,童心未泯的他打算用这个水瓢来玩游戏。 首先zzy准备了一个容量可看作无穷大的水缸,刚开始水缸是空的,然后用水瓢A往水缸里加水,用水瓢B把水缸里的水舀出去,当使用 水瓢B把水舀出去时水缸里必须要至少有1升的水。这样子使用N次水瓢A,也使用N次水瓢B,最后水缸会依旧空的。Input 输入有多个例子,直到文件结束。 每个例子仅含一个数N(0 2 #include 3 #include 4 #define mod 1000000007 5 #define maxn 10000+10 6 #define LL long long 7 阅读全文
posted @ 2013-10-02 16:13 little_w 阅读(793) 评论(0) 推荐(0)