上一页 1 ··· 4 5 6 7 8 9 下一页

2012年7月11日

自己动手 比较标程

摘要: 当有题目的标准输入和输出时,可以自己动手,比较写的代码是否能A.① 在程序的主函数中加入: freopen("D.in","r",stdin);freopen("Dout.out","w",stdout); 然后运行程序。(D.in 为程序提供的输入标程 Dout.out为自己创建的输出文件)② 运行CMD,输入fc 空格,然后将Dout拖入+空格+将提供的输出标程拖入,回车即可比较。 阅读全文

posted @ 2012-07-11 16:56 yumao 阅读(127) 评论(0) 推荐(1) 编辑

2012年7月10日

字典树 AC自动机

摘要: 字典树: 以树的形式存储字符串。便于进行快速检索以及最长公共前缀的获得。 结构体的构造:① struct node{ int count; node *next[26]; } ② struct node{ int count;int next[26]; }AC自动机: 字典树与KMP算法的结合。一般用于在一段字符串中查找多个模式串。步骤: 1. 将所有的模式串构造成一棵字典树; 2. 为树上的每一个节点构造其FAIL指针(方法下述); 3. 将文章与树开始进行匹配。每到一个不匹配的地方,就把匹配的文章与其fail指针指向的树的节点进行匹配;如果在过程中发现匹配节点返回到了根,且一直没变,则说明 阅读全文

posted @ 2012-07-10 22:43 yumao 阅读(218) 评论(0) 推荐(0) 编辑

2012年7月8日

二分图 匈牙利算法

摘要: 概念:(二分图中) 1. 最大匹配数:任意两条边不相交于同一顶点的边数。 2. 最小覆盖: 用最少的点让每一条边都至少和其中的一个点相关联。(不大于图中的小的一个点集数) 且点数=最大匹配数 3. 最大独立集: 两两之间没有边的点的最大数量。(最小为图中大的一个点集数) 点数=总点数-最大匹配数 4. 最小路径覆盖: 用最小不相交的路径覆盖有向无环图的所有节点。很多题目将模型抽象出来就是简单的二分图。eg. poj 2239 selecting courses 一周的课12节,有n门课,每门课一周有多个时间,教授相同的内容。求一个学生一周最多课上几门课。(多门课上课的时间不能冲) 将课程和时间 阅读全文

posted @ 2012-07-08 21:19 yumao 阅读(907) 评论(0) 推荐(0) 编辑

2012年7月6日

dinic 算法求最大流

摘要: 层次图: 每一点的层次表示为由原点到该点的最短路径(指的是所要经历的路径的条数)为该点的层次。每个顶点用层次来表示的图称为层次图。dinic 基本思想: 由层次图代替剩余图来寻找最短增广路。步骤: 1. 构成剩余图。2. 用bfs来形成层次图。 3. 利用层次图用DFS来寻找增广路。 4. 一边找一边得到增广路上的最小流。 5. 用最小流将增广路进行更新。 6. 重复34 5,直到找不到增广路。7. 更新层次图,重复2 3 4 5 6,直到层次图中不可到达终点。 8. 将所有的得到的最小流相加,即为最大流。题:code summer5 A (7.4 A) 阅读全文

posted @ 2012-07-06 09:19 yumao 阅读(148) 评论(0) 推荐(0) 编辑

2012年7月5日

网络流问题 最大流 ford-fulkerson算法 edmonds-karp算法

摘要: 可行流: 即多条弧的集合,且每条弧的流量为非负的,且不超过该弧的容量;流入原点的流量等于流出终点的流量。最大流: 即网络中的流量最大的可行流。最大流的求法:即由原网络得到残量网络,再找到残量网络中的增广路,根据增广路求最大流。步骤: 1. 找到残量网络中的一条增广路。2. 求出该增广路上的最小的流量值,使各个弧的容量都减去这个值,并各个反向弧都加上这个值。3. 重复1,2 直到找不到增广路。将每一次的流量值相加,结果为最大流。p s. ford-fulkerson算法在1中用的是深度搜索 edmonds-karp 算法在1中用到广度搜索。A - Drainage DitchesCrawling 阅读全文

posted @ 2012-07-05 21:16 yumao 阅读(1356) 评论(0) 推荐(0) 编辑

bellman-ford 算法 spfa 算法 实例 poj 3259

摘要: #include<iostream>#include<stdio.h>using namespace std;#define max 100000struct side{ int start; int end; int value;};side a[5000];int ver[500];int m1,m2,m3;bool bellman(){ for(int i=1;i<=m1;i++){ ver[i]=max; } ver[1]=0; int flag; int h... 阅读全文

posted @ 2012-07-05 20:54 yumao 阅读(419) 评论(0) 推荐(0) 编辑

2012年7月2日

优先队列实例 poj 3253

摘要: 该题运用哈夫曼树,用优先队列求出两个最小的节点值,相加好push进队列中。知道队列为空为止。DescriptionFarmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000) planks of wood, each having some integer length Li (1 ≤ Li ≤ 50,000) units. He then purchases a single 阅读全文

posted @ 2012-07-02 00:01 yumao 阅读(126) 评论(0) 推荐(0) 编辑

2012年7月1日

威佐夫博弈 hdu 2177

摘要: 威佐夫博弈基本思想: 两堆物品,可从一堆中取任意,也可从两堆中同时取相同多个。 该算法存在奇异状态:处在奇异状态必败;1. 奇异状态的求法:a0=0;b0=0;而后,ak=前未出现过的最小自然数;bk=ak+k; 可得出奇异状态。2. 判断是否为奇异状态:有一状态(a,b) if a=int((b-a)*(1+sqrt(5))/2); 则表明处于奇异状态。 3. 怎样转化成奇异状态:① a=b时,直接转化成(0,0); ②k=b-a;if(a-ak)=(b-bk);(a-ak)>0,(b-bk)>0 则转化为(a-(a-ak),b-(b-bk)); ③ 在ak中可以找到与a相等的, 阅读全文

posted @ 2012-07-01 20:54 yumao 阅读(772) 评论(0) 推荐(0) 编辑

尼姆博弈 hdu 2176

摘要: 尼姆博弈基本思想: 两人从n堆物品中取任意个,先取完者胜。 即将n堆物品的数量异或,得到的值如果为0,则先手败,反之先手胜。 如果要求先手在胜的条件下,到奇异局势的方法数,则判断异或的值与每一堆原值异或后(结果应该表示该堆没有参加异或时的异或值)与原值比较大小,如果小于,则方法数加一。且对应的方法后,该堆的数目应变为异或的值与每一堆原值异或的值。Descriptionm堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎样取子.例如5堆 5,7,8,9,10先取者胜,先取者第1次取时可以从有8个的那一堆取走7个剩下1个,也可以从有9个的中那一堆取走9个 阅读全文

posted @ 2012-07-01 20:33 yumao 阅读(641) 评论(0) 推荐(0) 编辑

巴什博弈 hdu 2149

摘要: 巴什博弈基本思想: 两人在限制(1~n)的条件下,谁先达到m谁胜出。 则分情况讨论: 1. n>=m时;先手胜出;2. m==n+1时,先手败;3. m%n+1!=0时,先手胜; 4. m%n+1=0,先手败; 且在第三种情况时, 如果后手取k,则先手取n+1-k。Description虽然不想,但是现实总归是现实,Lele始终没有逃过退学的命运,因为他没有拿到奖学金。现在等待他的,就是像FarmJohn一样的农田生涯。要种田得有田才行,Lele听说街上正在举行一场别开生面的拍卖会,拍卖的物品正好就是一块20亩的田地。于是,Lele带上他的全部积蓄,冲往拍卖会。后来发现,整个拍卖会只有L 阅读全文

posted @ 2012-07-01 20:18 yumao 阅读(258) 评论(0) 推荐(0) 编辑

上一页 1 ··· 4 5 6 7 8 9 下一页

导航