随笔分类 -  ACM资料

1 2 下一页

匈牙利算法的小总结
摘要:背景:设G=(V,E)是一个无向图。如顶点集V可分区为两个互不相交的子集V1,V2之并,并且图中每条边依附的两个顶点都分属于这两个不同的子集。则称图G为二分图。二分图也可记为G=(V1,V2,E)。给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。 选择这样的子集中边数最大的子集称为图的最大匹配问题(maximal matching problem)(引自维基百科)1. 匹配边:连结分属于V1和V2的两个顶点的边。其他边是未匹配边。2.匹配点:匹配边所连结的顶点。不在匹配边上的顶点就是未匹配点。3.交错路:设P是图G的一条路,如果P的任意 阅读全文

posted @ 2013-09-20 13:08 铁树银花 阅读(444) 评论(0) 推荐(0)

编程中无穷大常量的设定技巧(转)
摘要:转自http://aikilis.tk/如果问题中各数据的范围明确,那么无穷大的设定不是问题,在不明确的情况下,很多程序员都取0x7fffffff作为无穷大,因为这是32-bit int的最大值。如果这个无穷大只用于一般的比较(比如求最小值时min变量的初值),那么0x7fffffff确实是一个完美的选择,但是在更多的情况下,0x7fffffff并不是一个好的选择。很多时候我们并不只是单纯拿无穷大来作比较,而是会运算后再做比较,例如在大部分最短路径算法中都会使用的松弛操作:if (d[u]+w[u][v]<d[v]) d[v]=d[u]+w[u][v];我们知道如果u,v之间没有边,那么 阅读全文

posted @ 2013-09-03 09:40 铁树银花 阅读(619) 评论(0) 推荐(0)

codeblocks快捷键(转)
摘要:==日常编辑==• 按住Ctrl滚滚轮,代码的字体会随你心意变大变小。• 在编辑区按住右键可拖动代码,省去拉(尤其是横向)滚动条之麻烦;相关设置:Mouse Drag Scrolling。• Ctrl+D可复制当前行或选中块。• Ctrl+Shift+C注释掉当前行或选中块,Ctrl+Shift+X则解除注释。• Tab缩进当前行或选中块,Shift+Tab减少缩进。• 可拖动选中块使其移动到新位置,按住Ctrl则为复制到新位置。• 按下Atl,再拖动鼠标,可以实现部分选择(即只选中一个区域内的字符,而不会包含它们所在行的其他字符)。• 需要更大编辑空间时,F2和Shift+F2分别可以显隐下 阅读全文

posted @ 2013-07-22 23:49 铁树银花 阅读(299) 评论(0) 推荐(0)

编程经验总结
摘要:1.在使用BFS时要用到队列保存结点,同时一般要设置一个布尔型数组vis标记已经访问过的结点,初始值为0,访问过设为1.那么设置vis[i]=1的时机是什么时候呢?这仿佛是个白痴的问题,但如果不注意却有可能使得广搜过程中重复地搜索已访问的的结点而使得时耗大增。答案是在que.push(i);后立即执行vis[i] = true;这样才能有效地标记每一个进入队列的结点。我曾经试过在pop后才标记vis[i]=1,这样就造成了标记滞后,在pop之前可能结点i就被重复访问了。2.(a+b)%c = (a%c+b%c)%c正确,但是(a-b)%c = (a%c-b%c)%c不一定,比如a=7,b=5, 阅读全文

posted @ 2013-04-28 14:00 铁树银花 阅读(179) 评论(0) 推荐(0)

STL之next_permutation——求全排列
摘要:next_permutation功能:将[first, last)范围内的排列重组为字典序更大的下一个新排列。permutation正是“排列”之意。调用形式:next_permutation(first, last),其中,first是指向排列头元素的指针,last是指向排列末元素再下一位的指针,两者给出排列范围:[first, last).函数所在头文件:<algorithm>例子: 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int main() 6 { 阅读全文

posted @ 2013-03-22 16:37 铁树银花 阅读(263) 评论(0) 推荐(0)

C++ pair(对组)用法
摘要:类模板:template <class T1, class T2> struct pair参数:T1是第一个值的数据类型,T2是第二个值的数据类型。功能:pair将一对值组合成一个值,这一对值可以具有不同的数据类型(T1和T2),两个值可以分别用pair的两个公有函数first和second访问。具体用法:1.定义(构造):1 pair<int, double> p1; //使用默认构造函数2 pair<int, double> p2(1, 2.4); //用给定值初始化3 pair<int, double> p3(p2); //拷贝构造函数2. 阅读全文

posted @ 2013-03-10 16:30 铁树银花 阅读(31906) 评论(2) 推荐(5)

线段树成段更新之延迟更新
摘要:线段树成段更新之延迟更新成段更新的重点是延迟更新,以区间[1,3]为例说明。注意,此例中“更新”为修改元素的值为a,“查询”为求区间中所有元素之和。建立二叉树如图示:每一个圆圈代表一个结点,圆内数字分别为结点标号和所对应区间,[i]表示只含一个数,只出现在叶节点中。当 要更新区间[1,2]中所有元素时,对应上图即要更新结点4,5。一种方法是依次访问结点4和5并更新,但这样时间和空间开销都较大,当要修改的区间的长 度较长时尤甚。于是可以采取“延迟更新”,即将更新信息储存在这段区间对应的结点处,此例中[1,2]对应的区间是结点2,给结点一个属性tag用以 记录这个更新信息a,原来tag初始化为0, 阅读全文

posted @ 2013-02-25 17:22 铁树银花 阅读(1264) 评论(1) 推荐(1)

BKDR Hash Function
摘要:字符串哈希函数繁多,据说在信息学竞赛中,高效而易于记忆的是BKDR Hash Function. 代码如下: 1 // BKDR Hash Function 2 int BKDRHash(char *str) 3 { 4 int seed = 131; // 31 131 1313 13131 131313 etc.. 5 int hash = 0; 6 7 while (*str) 8 { 9 hash = hash * seed + (*str++);10 }11 12 return (hash & 0x7FFFFFFF);... 阅读全文

posted @ 2013-02-21 21:05 铁树银花 阅读(1455) 评论(0) 推荐(0)

gets()
摘要:参考资料:点击打开链接原型:char * gets ( char * str );功能:通过标准输入(stdin)读入字符并存储到C类型的字符串,当检测到换行符或者文件结束符时停止读入。换行符和文件结束符不读入字符串中。'\0'自动添加到字符串的最后。参数str:str是指向一段内存空间的指针或者是字符数组的数组名,它指向所读入的字符串,注意str指向的内存空间中原有的内容将被修改。返回值:(1)读入成功:返回str。(2)读入失败:返回NULL。例程:/* gets example */ #include <stdio.h> int main() { char s 阅读全文

posted @ 2013-01-12 15:31 铁树银花 阅读(268) 评论(0) 推荐(0)

01背包问题
摘要:问题描述:有N件物品和一个载重量为C的背包。第i件物品的重量是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。问题特点:每种物品仅有一件,可以选择放或不放。(0:不放 1:放)基本思路:用p[i][j]表示从i件物品中选择物品放入一个容量为j的背包中可以获得的最大价值。得到如下关系:1.p[i][0] = p[0][j] = 0··········· (1)2.p[i][j] = p[i - 1][j] (当j < w[i]) 阅读全文

posted @ 2012-11-19 23:47 铁树银花 阅读(165) 评论(0) 推荐(0)

归并排序模板
摘要:1 #include <iostream> 2 #include <string> 3 #include <cstdio> 4 #include <cmath> 5 #include <cstring> 6 #include <algorithm> 7 #include <vector> 8 #define LL long long 9 #define MAXI 214748364710 #define MAXL 922337203685477580711 #define eps (1e-8)12 #defin 阅读全文

posted @ 2012-09-11 21:47 铁树银花 阅读(259) 评论(0) 推荐(0)

STL -- vector
摘要:vector1.创建具有一定数量的元素且每个元素具有相同初始值的向量:vector<int> v(10, 1); //向量中有10个元素,每个元素都是12.用下标方式访问向量中的元素vector<int> v(3); //具有3个元素的向量v[1] = 2; //给第二个元素赋值,注意向量下标由0开始cout << v[2] << endl;3.用sort(需要声明头文件“#include<algorithm>”)给向量中的元素排序,若无声明排序函数,默认按照数值大小的非降序排列sort(v.begin(), v.end()); // 阅读全文

posted @ 2012-09-02 21:37 铁树银花 阅读(188) 评论(0) 推荐(0)

[置顶] 最长公共子序列求解
摘要:原文地址:http://blog.csdn.net/yysdsyl/article/details/4226630写得很好,故转载存档。提示:阅读此文前,务必先明确最长公共子序列不一定是原父串的一个连续子序列,子序列不要求连续,就如数列的子列一样.我对原文做了适当的修改,使得文章更明了易懂,如有不当欢迎指正。正文:动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该 阅读全文

posted @ 2012-08-02 10:13 铁树银花 阅读(321) 评论(0) 推荐(0)

一些排序方法的总结
摘要:1.sort头文件:algorithm(1)有数组a[n],通过sort(a,a+n),可以将数列从a[0]到a[n-1]排序;通过sort(a+1,a+n-1)可以将数列由a[1]到a[n-2]排序。默认是从小到大排序。(2)如果希望从大到小排序或者按照其他规则排序可以设置比较函数。排序对象:struct Group { int s,e,idx; }a[5001];比较函数:bool cmp(Group x, Group y) { if(x.e!=y.e) return x.e<y.e;//从小到大排序 else if(x.s!=y.s) return x.s<y.s... 阅读全文

posted @ 2012-07-31 21:24 铁树银花 阅读(390) 评论(0) 推荐(0)

<C++学习笔记>iterator C++
摘要:迭代器是指向数据集合(比如数组、容器)中的元素的数据类型,它可以通过一系列的操作(如自增运算符++,取值运算符*)遍历数据集合中的元素。 迭代器的一种显著形式是指针。指针可以指向数组中的元素,可以通过自增操作“++”遍历数组中的元素。此外迭代器还有其他形式,例如,每一种类型的容器,如vector,都设置有一个特定形式的“iterator”用于高效低遍历其中的元素。 注意,虽然指针是一种典型的迭代器,但并非所有的迭代器都具有与指针相同的功能。指针具有一些迭代器所不需要具有的功能。 迭代器存在五个分类,这五个类别是根据迭代器所执行的功能划分的,五个类别分别是:输入迭代器,输出迭代器,随机... 阅读全文

posted @ 2012-07-27 23:13 铁树银花 阅读(531) 评论(0) 推荐(0)

<STL学习笔记>Priority_queue
摘要:优先队列是一种容器适配器(容器适配器的概念本人不会解释,故此处无法作出说明),它的第一个元素(位于头部top)总是队列中最大的元素,这里的“最大”是指队列元素的严格弱序中的“最大”。严格弱序是一系列数或事物按照一定的比较关系“<”排列得出的序列,“<”可以是数学中进行数值比较的大于,也可以是小于,还可以是其它含义,这大概与离散数学中的“偏序关系”相仿。 在内存充足的情况下,优先队列能被无限地插入元素。 优先队列作为一个容器适配器,它使用其它容器作为底层容器,并提供一系列访问元素的函数。优先队列中的元素从底层容器的“尾部(back)”弹出,即是从队列的顶部(top)弹出。底层容器需要 阅读全文

posted @ 2012-07-27 13:02 铁树银花 阅读(8641) 评论(0) 推荐(0)

[置顶] ASCII码表
摘要:ASCII码表ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符0NUT32(space)64@96、1SOH33!65A97a2STX34”66B98b3ETX35#67C99c4EOT36$68D100d5ENQ37%69E101e6ACK38&70F102f7BEL39,71G103g8BS40(72H104h9HT41)73I105i10LF42*74J106j11VT43+75K107k12FF44,76L108l13CR45-77M109m14SO46.78N110n15SI47/79O111o16DLE48080P112p17DCI49181 阅读全文

posted @ 2012-07-22 09:42 铁树银花 阅读(309) 评论(0) 推荐(0)

约瑟夫问题
摘要:问题提出:n个人(编号1~n)围成一个圈,从1开始依次报数,报到m的出列,剩下的人继续从1开始报数(由刚出列的人的下一个人开始)。求最后出列的人(胜利者)的编号。为了讨论方便,先把问题稍微改变一下,并不影响原意:问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。我们知道第一个人(编号一定是m%n-1)出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始):k k+1 k+2 ... n-2, n-1, 0, 1, 2, ... k-2,并且从k开始报0。现在我们把他们的编号做一下转换:k --> 阅读全文

posted @ 2012-07-21 08:59 铁树银花 阅读(195) 评论(0) 推荐(0)

cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
摘要:转载,并经过本人补充cin、cin.get()、cin.getline()、getline()、gets()等函数的用法2007/10/27 22:51学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息;1、cin1、cin.get()2、cin.getline()3、getline()4、gets()5、getchar()1、cin>>用法1:最基本,也是最常用的用法,输入一个数字:#include <iostream>using n 阅读全文

posted @ 2012-07-18 22:22 铁树银花 阅读(212) 评论(0) 推荐(0)

欧氏距离(Euclidean distance)
摘要:原文地址:http://www.blogjava.net/spec-second/archive/2008/08/17/222609.html欧氏距离(Euclidean distance)欧氏距离定义: 欧氏距离( Euclidean distance)是一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离。在二维和三维空间中的欧式距离的就是两点之间的距离,二维的公式是 d = sqrt((x1-x2)^+(y1-y2)^) 三维的公式是 d=sqrt(x1-x2)^+(y1-y2)^+(z1-z2)^) 推广到n维空间,欧式距离的公式是 d=sqrt( ∑(xi1-xi2)^ ) 阅读全文

posted @ 2012-07-14 10:48 铁树银花 阅读(2001) 评论(0) 推荐(0)

1 2 下一页

导航