2011年7月6日

字符串匹配:看毛片算法及其它

摘要: 很久就久仰过KMP算法的大名,也学了不少时间,但是都是一知半解。最近重新拿起CLRS翻翻,发现基本能看懂了,顺便把第32章:字符串匹配给翻了一下。 朴素的字符串匹配就不用多讲了…… Rabin-Karp算法的思想是产生数,把字符映射为一个数字,然后一个子串就相当于一个整数,如果两个整数值相等就是match成功了。当然,字符太多会溢出,那么就用整数模一个素数的值来比较,但是又会存在碰撞。所以当找到一... 阅读全文

posted @ 2011-07-06 15:09 oa414 阅读(1650) 评论(0) 推荐(0) 编辑

2011年6月23日

费用流:方格取数

摘要: 纠结这个问题已经很久了,题目不难,简单的DP就行了。可是也可以算是网络流建模的经典例题。今天终于调过了NOIp2008的传纸条,顺便把程序改了改交了NOIp2000的方格取数与3取方格数、n取方格数。 传纸条的算法见NOIP2008 传纸条 费用流建模 原来以为只有输入不同,但是传纸条与方格取数还是不同的,传纸条要求每个同学只能帮一次,所以拆点后连一条边即可,而方格取数可以重复经过(虽然数字已经被... 阅读全文

posted @ 2011-06-23 23:17 oa414 阅读(846) 评论(0) 推荐(0) 编辑

2011年6月22日

散列表(一)基础

摘要: 很久以前就接触过hash,可是当时链表都没有写过,毕竟在竞赛中用得太少了。近段时间做了不少网络流的题目,都是数组模拟的链表存储图的,再回过头看hash,就很好理解了。 hash的资料到处都有,就不再废话了。处理冲突一般有两种:分离链接法和开放定址法。就是挂链表和抢别人的位置嘛。至于什么平方取中啊,再散列啊,虽然有所了解,但还是继续纸上谈兵吧。实际应用的话熟练掌握几个hash函数的方法并能熟练运用就... 阅读全文

posted @ 2011-06-22 23:27 oa414 阅读(242) 评论(0) 推荐(0) 编辑

2011年6月19日

二叉堆(一):基础

摘要: 原来对堆虽然理论比较了解但只打过几个堆排序,最近复习一下吧。POJ3253{FJ要把一条木棒切成给定长度的n根木条,每次的花费是木棒的长度,求总花费和合并果子基本一样,但是题目描述是逆向的,需要一点思考,可以把切割看成合并,贪心得合并最小的木条并记录最花费虽然用队列是最优的,但就用来练习基本的heap操作吧,支持下滤,返回并删除最小元2011-06-19 22:41}var a:array[0..1000000] of longint; heapsize:longint; m,n,min1,min2:longint; i,j,k:longint; ans:int64;procedure hea 阅读全文

posted @ 2011-06-19 23:21 oa414 阅读(306) 评论(0) 推荐(0) 编辑

2011年6月12日

线段树(一)

摘要: 线段树具有良好的二分结构,支持logN的插入,查找,查询操作,是处理区间问题的利器。 近段时间我将会逐渐完成一位HDU的大牛的线段树专辑的部分题目与其它线段树题目以巩固线段树的学习,并把代码发上来。 因为HDU题库交Pascal的程序总是CE,所以大部分是用C语言写的。 HDU1166/*题意:给出n个兵营的人数,给出若干命令,包括增减某个兵营的人数和询问编号在[x..y]区间内的兵营的总人数有多... 阅读全文

posted @ 2011-06-12 22:26 oa414 阅读(357) 评论(0) 推荐(0) 编辑

2011年6月6日

网络流/二分图总结

摘要: 这里整理一些最基础的网络流/二分图算法和裸的题目的源代码,以后自己查起来方便些,具体的题目分析以后再慢慢来吧二分图匹配:匈牙利算法和最大流建模USACO stall4代码:匈牙利http://fayaa.com/code/view/20052/最大流http://fayaa.com/code/view/20053/二分图最小覆盖数其实就是用点覆盖与之相邻的边,求最小点数,二分图最小覆盖数=最大匹配数POJ1325代码:http://fayaa.com/code/view/20059/二分图的独立数就是二分图中选出最多的点数,保证之间无边相连,二分图最大独立数=顶点数-最大匹配数带权二分图匹配: 阅读全文

posted @ 2011-06-06 16:35 oa414 阅读(365) 评论(0) 推荐(0) 编辑

二分图最小带权点覆盖

摘要: 题目:TYVJ1338题解:根据奇偶格子,可以表示成一张二分图,然后相邻格子之间连边。相当于是在一张二分图里面选出权值和尽量大的点使得任两个选出来的点不相邻。考虑所有没有选出来的点,那些点恰好构成了一个二分图点对边的覆盖,并且使得权值和尽量小。格子黑白染色后。建立源点s,s到每个黑格连条弧,容量为格子的权值。建立汇点t,每个白格到t连条弧,容量为格子的权值。如果某两格子有公共边,就从黑格到白格连一条容量为∞的弧做s到t的最大流。答案即为(sum - maxflow)sum为总权值。个人乱七八糟的理解:二分图中,流图的点都是不选的,如果还有增广路就流过去了。最大流=最小割,所以最大流量=不选的点 阅读全文

posted @ 2011-06-06 12:27 oa414 阅读(857) 评论(0) 推荐(0) 编辑

2011年6月5日

带权二分图匹配:KM算法与费用流建模

摘要: KM似乎还是有点难以理解,看了半天资料仍有半懂不懂的感觉,或许以后多想想、画画,做些题能加深理解吧,当初学匈牙利的时候就是这样。相关资料二分图带权匹配 KM算法与费用流模型建立丘比特的问题——求二分图最大权匹配的算法nocow上的讲解题目:ural1076原题:http://acm.timus.ru/problem.aspx?space=1&num=1076译题:http://www.nocow.cn/index.php/Translate:URAL/1076题解:http://www.nocow.cn/index.php/URAL/1076我的KM是抄nocow上的题解的,只不过出于 阅读全文

posted @ 2011-06-05 23:38 oa414 阅读(481) 评论(0) 推荐(0) 编辑

费用流:邻接表实现

摘要: 虽然说最小费用流10分钟就能敲出来,可是只是练习过裸的邻接矩阵实现。曾经考虑过用邻接表实现,尝试写过方格取数,未果,今日翻出来,发现bug一堆。今天写POJ2315,然后纠结了一个多小时,80%时间都在debug,最后发现是一些低级错误+邻接表的实现错误。总的来说,邻接表需要存储prev和prevEdge数组,分别记录当前节点的前驱节点和连向当前节点的边在数组中的位置,前者用来往前找,判断有没有到源点,后者用来求增广路的流量、更新流量。本题做法参考了http://www.cnblogs.com/ylfdrib/archive/2010/08/05/1792735.html题意简单:FJ有N个农 阅读全文

posted @ 2011-06-05 20:33 oa414 阅读(358) 评论(0) 推荐(0) 编辑

最大流SAP算法的当前弧优化

摘要: 找了很多资料和程序,大多是编程风格和语言实在和我的不相符和。终于搞得有点明白了。因为找的时候会有很多不可行的弧,在距离标号修改之前还是不可行的,那么我们引入cur数组,标志可行的第一条弧,每次如果修改了距离标号的话就修改它。据这位说:"早就听说当前弧优化,但是一加到自己代码上就错。这次终于找到原因了,因为以前把更新距离标号的一部分操作挪到寻找可行弧时完成,但这样一来就会出现问题。把操作独立出来之后... 阅读全文

posted @ 2011-06-05 11:19 oa414 阅读(1311) 评论(0) 推荐(0) 编辑

导航