
acm
文章平均质量分 67
小小小小杜
You don't have to be faster than the bear, you just have to be faster than the guy next to you ...
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
01背包、完全背包、多重背包
这几天自学了一下背包类问题,即01背包问题、多重背包问题、完全背包问题。感觉挺有用的,三种问题分别描述如下:01背包问题:给你一个背包,体积(重量)V一定,现在有一些东西,分别给出价格和体积(重量)Price i,V i,,每个东西只能用一次,要你在不超过背包体积的请况下,如何选择,才能装最多价值的东西。多重背包问题:。。。。。 ,体积(重量)V一定,现在有一些东西,分别给出价格和体积(原创 2013-08-28 23:56:31 · 654 阅读 · 0 评论 -
顺序链表
今天学了顺序链表,自己编了一下,用数组实现,不过不够成熟,还需要改进,//循序链表.cpp//操作为插入(insert)制空(Making_full)判空(Is_full)才找(Search),判空(Is_empty),删除(delete_sag)#include #include #include using namespace std;#define Max 100typedef原创 2013-09-05 23:58:34 · 545 阅读 · 0 评论 -
结构体链表
今天写了一下结构体链表,相比顺序链表而言,要相对复杂,但其中没有合并操作,以后在写,这个结构体链表不够成熟,但相对简单的操作还是可行的,下面是代码://结构体实现聊表//提供如下操作 1制空(Making_empty),2判空(Is_empty),4插入(Insert_sag),5查找(Search_sag),6删除(Delete_sag),8退出(exit),7合并(Connect_two原创 2013-09-07 13:09:24 · 773 阅读 · 0 评论 -
poj.3041--二部图的最小定点覆盖
这道题可以这样转化,将每个顶点看成是一条边,每条边的起点为行,终点为列,而这题就是求覆盖所有顶点的行数和列数的和的最小值,也就是说这题可以转化为连接所有边的顶点的最小数---也即二部图的最小顶点覆盖。下面是代码:#include #include #include #define Max 501int pre[Max];bool match[Max][Max];bool vi[Ma原创 2013-09-08 12:30:48 · 1047 阅读 · 0 评论 -
poj1573模拟加bfs
题目大意:就是给定一个方格,给你一个起点,在第一排,有W,S,E,N四个字符,w表示向左走,e表示向右走,s表示向下走,n表示向上走。这个题目刚读完就想到bfs搜素,很明显这题相对其他的搜索提来说更简单一些,因为每一步的下一步都是确定的,不像以前的题目下一步要选择,所以理解起来也简单,那么题目的关键点就是如何判断是否能走出,还有如果不能走出,那么又该如何表示loop的数量,那么这里很自然想到了de原创 2013-09-02 23:38:19 · 583 阅读 · 0 评论 -
并查集
今天学了并查集,总结一下:并查集的最本质应用是将属于同一类的事物并在同一集合,这样有几个集合就有几类事物了,并和查是在一起进行的。下面是代码模型1.#include 2.#include 3.#define Max 101 4.int set[Max]; 5.int find(int x); 6.int n,m; 7.int main() 8.{原创 2013-09-08 23:28:37 · 624 阅读 · 0 评论 -
poj.2485
最小生成树的应用,就是求最后加入的那条边直接贴代码:#include #include #include using namespace std;#define Max 510struct Por{ int from; int to; int value;}node[Max*Max];int set[Max];int find(int x);boo原创 2013-09-09 23:44:40 · 590 阅读 · 0 评论 -
广搜poj.3009
这题是广搜的一道难度中等的题,主要注意题目的意思,然后就是典型的广搜了,直接贴代码:#include #include #include #include using namespace std;#define MAX 22#define maxn 100000struct Por{ int x; int y; int deep;}node[maxn];int p[M原创 2013-09-03 23:47:51 · 624 阅读 · 0 评论 -
poj.1988并查集-路径压缩、更新结点(偏移量)
题目描述很简单就是有N个盒子,标号分别为1-N,现有两种操作,一种是移动,将包含x的整体方块移到包含y的整体方块的上方,注意是整体移动,另一种为读取操作,输出在x下方方块的个数,那么对于这题感觉就是并查集路径压缩以及更新结点的典型,我们定义一个偏移量代表子节点与根节点的距离,然后定义一个son数组代表x下方的结点的个数,这样用根节点的son--所求结点的偏移量-1 就是x下方的方块数量了:下面是代原创 2013-09-11 17:49:46 · 815 阅读 · 0 评论 -
单项链表--尾插法
今天学了尾插法单项链表,写了一下代码,还不够成熟,需要改进,下面是代码,这个模版不是很好,个人感觉,虽然是书上的,但感觉实际意义不大,不过还是熟悉一下课本吧:下面是我写的代码,尾插法建立单链表“://为节点单链表的相关操作//初始化#include #include using namespace std;typedef int type_int;typedef struct原创 2013-09-13 00:32:34 · 763 阅读 · 0 评论 -
简单-基础排序
今天写了排序的几种算法。都是最简单的,也是最基础的,下面是代码:#include #include //#include //using namespace std;int n;/*void Bubble(int *p,int n){ int t,j,temp; for(t=1;t<n;t++){ for(j=0;j<n-t;j++) if(p[j原创 2013-09-13 12:00:19 · 764 阅读 · 0 评论 -
高精度计算
今天学了高精度计算,感觉几乎所有算法都差不多,下面是加法与减法的代码,结合poj1503://高精度计算//加法#include #include #include #include using namespace std;#define Max 100#define Maxn(a,b) (a)>(b)?(a):(b)int an1[Max+10];int an2[Max+原创 2013-09-16 00:45:01 · 786 阅读 · 0 评论 -
顺序栈和链栈
今天学了顺序栈和链栈,自己写了一下代码://#include //#include /*//顺序栈的实现与简单应用//实现提供操作init_stack(初始化链表).clearstack(制空栈),Push(插入),Pop(删除),Is_empty(判空).Is_full(判满)//GetTop(读栈顶元素)//代码:#include #include #i原创 2013-09-17 17:47:51 · 683 阅读 · 0 评论 -
poj.1416
这道题目的大体意思很简单就是三种可能的结果,另外操作就是沿着给出的一个数,求各种组合相加起来的结果,其结果不能超过原数,而且最大的可能结果要求不能重复,那么这题很明显就是一道搜索类的题目,至于bfs还是dfs,我觉得都可以,下面是我dfs的代码:#include #include #include using namespace std;#define Max 10;char p原创 2013-09-22 00:04:24 · 606 阅读 · 0 评论 -
poj.2318
这题是几何的入门题,主要是考察点与线段的叉积,思路和题意都很简单,主要是要注意其中几个点,下面是我的代码:#include #include #include using namespace std;#define Max 5000int n,m;int x1,y1,x2,y2;int count[Max+10];struct point{ int x; int y;原创 2013-09-22 17:04:58 · 615 阅读 · 0 评论 -
图的邻接表
图有两种表示方法,一种是邻接矩阵,一种是邻接表,今天主要写邻接表,主要是要理解建立的过程,首先建立一个边结点,其中包含结点的编号,还有边的权值,另外还要有一个指向边结点的指针以便完成结点的连接,然后是头结点,头结点要有一个包含结点数据的变量,另外还要有一个指向边结点的指针,之后才是表的建立了,那么表应该包含一个结点的数组,建立表头结点,然后就是结点数和边数了,这样图的邻接表就建立完成了。下面是我的原创 2013-09-22 21:24:54 · 729 阅读 · 0 评论 -
图的拓扑排序(邻接表实现)
对有向无环图(DAG图进行拓扑排序:将图中的顶点组合成一个现行序列,使得若属于DAG图,则x在序列中位于y之前,凡DAG图都有拓扑序列,但是序列可能不同,如果有向图中含有环则不能组成拓扑系列,原因很显然。以下是我的DAG图邻接表的拓扑排序代码(结合上篇的图的临界表查看):#define Max 100;//结点个数(最大)int count[Max];//记录入度int record[Ma原创 2013-09-23 22:59:46 · 3014 阅读 · 0 评论 -
poj.1753dfs
这道题的意思很简单,主要需要注意的有两点,第一:矩阵中的每个点都最多被主动翻一次,(注意不是被动),所以总共有2^16种可能,只要枚举每种可能了。第二:翻转的顺序对结果没有影响,所以问题的关键就在于那些点被主动翻转了。翻转多少次就有多少次round,只要求出所有round中最小的一个就是答案了,如果没有一种可能可以得到结果则输出“Impossible"。下面是代码和测试数据://#includ原创 2013-10-09 18:11:36 · 166133 阅读 · 0 评论 -
poj.2965
这道题与poj1753基本上一致,核心问题就是矩阵的每一个点最多只能主动翻转一次,并且顺序不影响结果,那么总共就有2^16中可能了,不同点是需要记录过程中的翻转点,这是问题的关键,只需采用一个结构体数组即可,个数为16(注意体会),其他的就基本上和poj1753一样了,由于后面的情况会影响到前面的数组所以需要重新创建数组来记录新的变化。下面是代码:#include #include原创 2013-10-10 18:54:37 · 606 阅读 · 0 评论 -
稀疏矩阵的转置算法
今天学了稀疏矩阵的转置算法,稀疏矩阵主要是为了节省存储空间,因为实际生活中对于一组数据只有比较少的数据是有意义的,所以可以用稀疏矩阵来存储那些有意义的数据,而把没有用的数据省略掉,而现在计算机中二维矩阵主要是行优先存放,所以稀疏矩阵的存储顺序就以行优先,每个元素包含三个数据:行号;‘列号;值;而稀疏矩阵本身也有三个数据:矩阵的行数,矩阵的列数,矩阵中非零元素的个数;那么矩阵的转置也以行优先的顺序存原创 2013-10-10 23:41:18 · 2948 阅读 · 0 评论 -
poj.2109
下面提供了各种浮点类型数据的范围:类型 长度 (bit) 有效数字 绝对值范围float 32 6~7 10^(-37) ~ 10^38double 64原创 2013-10-11 15:25:55 · 598 阅读 · 0 评论 -
poj.2586dfs
这道题目的意思是有12个月,每个月要么盈利s,要么亏损d,没连续五个月就又一次上表,总共有八次note,每次都亏损,现给出s和d,要求如果有盈利的情况,求出盈利情况中盈利最多的数目,否则就输出"Deficit“这道题总共有2^16中可能,可以用dfs枚举每种可能,然后求出满足题意的盈利最大值。思路很简单,下面是代码:#include #include int s[12];int Ma原创 2013-10-11 18:55:38 · 595 阅读 · 0 评论 -
poj.3295-模拟
这道题目初看很难懂,题意的关键是:WFF这种串五种自变量,分别为:p,q,r,s,t;并且为逻辑运算符(也即只能取0或1)有五中运算符,分别为:K,A,N,C,E,运算符的性质用表给出了,现在在WFF串的基础上再定义一个tautology,要求对于WFF中自变量的任意组合,都有表达式的值为1(true);否则不是输出not.那么关键点就是如何运算了,其实就是从右到左遇到运算符就运算,并将结果保留下原创 2013-10-11 22:01:19 · 493 阅读 · 0 评论 -
字符串的简单模式匹配
字符串的模式匹配是非常重要的应用,下面是最简单的模式匹配代码://顺序串的简单模式匹配#include #include #include #define Max 100bool trag;char *Is_exist(char *s,int poi,char *t){ int n=strlen(s),m=strlen(t); if(poi=n){ p原创 2013-09-27 11:40:53 · 899 阅读 · 0 评论 -
字符串的拼接--自定义函数
关于字符串的库函数有许多,strlen(s):求s长度 ; strcpy(t,s)将s内容复制到t中 ;strncpy(t,s,n)将s中前n个字符拷贝到t中,是strcpy()的扩展,常用的用法为 strncpy(t,s,sizeof(t)-1); t[sizeof(t)-1]='\0'; char *strchr(char *str,char ch);在str中查找原创 2013-09-26 23:59:54 · 1359 阅读 · 0 评论 -
poj.1068模拟
这道题目好理解,就是给定一个有‘(’和‘)’组成的串,有两种表达方式,一种为p串,其每个数字为顺数括号,没碰到一个右括号就数其前面的左括号,而其值就是左括号的个数,另一中为w串,其定义为:顺数括号,没碰到一个右括号就找从与之匹配的左括号到这个右括号之间的右括号的个数,而w中的值就是右括号的值+1,这样就得到了,括号串的两中不同表达方法。题目的要求是给定一个括号串的P表达形式,输出与之相对应的w的表原创 2013-10-12 19:08:02 · 558 阅读 · 0 评论 -
poj.2996
这道题目的大意是;给定一个8*8的棋盘,其中的格子中可能放有white的棋子,用大写字母表示;也可能放有black的棋子,用小写字母表示。a-h表示列,从左到右分别代表1到8列,用1到8的数字表示行,从低到高分别为1到8,题目要求输入这样的棋盘,根据棋盘输出两行,分别为white类型的棋子,black类型的棋子,并按一定次序输出。本题的核心就是模拟输入,然后开两个结点数组,分别记录white和bl原创 2013-10-14 12:33:24 · 611 阅读 · 0 评论 -
队列-循环队列/链队列
今天学了队列,就自己写了一下代码,队列有顺序队列和循环队列以及链队列,由于顺序队列存在“假上溢”现象,所以基本上不用,那么主要研究循环队列和链队列,循环队列是采用数组实现的,其中分别由front 和rear指示队列的头和尾,插入和删除分别只能在队尾和队首进行,这样才能实现数据先进先出的数据结构,而栈是数据现先进后出的数据结构,与队列刚好相反,所以栈只能在栈顶进行删除与插入,这样才能实现数据先进后出原创 2013-09-24 23:46:38 · 762 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历
这几天学习了图的存储结构,有用;邻接矩阵和邻接表法两种方式。其中两种表示方法各有相应的用途,在这里仅用邻接表法来表示图,并且讨论图的深度优先遍历和广度优先遍历,下面是代码://ArcNode 边结点; VertexNode 表头结点; AdjList 邻接表表示法//图的邻接表表示法#include #include #include //#include #define Ma原创 2013-10-15 22:37:47 · 975 阅读 · 0 评论 -
顺序表+单链表+双链表
顺序表用数组存放数据,它的数据个数是固定的,有一个上限位Max,而单链表则没有上限,而单链表的创建有两种方法,头插法和尾插法,头插法是创建栈的方法,而尾插法是创建队列的方法,单链表的每个结点包含一个存放数据的变量,和指向下一结点的指针,而双链表的每个结点包含一个存放数据的变量和指向前面结点的指针和指向后面结点的指针,也即双链表多提供了一个指针,用来指向它前面的结点,这样在进行一些操作时就容易的多了原创 2013-10-17 19:33:44 · 693 阅读 · 0 评论 -
拓扑排序
拓扑排序:即对有向无环图进行排序,使得排序后所得系列满足如下条件,凡是是属于DAG图则有s在序列中位于t的前方,这样得到的序列称为拓扑排序序列,那么有两种方法构建拓扑排序。条件是:该有向图必须是无环图即DAG图。一种是Kahn算法:(伪代码)L← Empty list that will contain the sorted elementsS ← Set of all nodes w原创 2013-10-17 22:35:30 · 575 阅读 · 0 评论 -
poj.1094
本题的意思是,给定一个n和m,其中n代表共有A、B、C等共n个大写字母,m代表有m个序列,题目要求是根据给出的序列判断是否能得出一个能确定的序列:下面是代码:#include #include #include #include using namespace std;#define Max 1000struct Node{ int from; int to;}node[Ma原创 2013-10-20 22:39:07 · 531 阅读 · 0 评论 -
poj.3041
这道题是一道很巧妙的题目,将题目中的边转化成了点,将点转化成为边,然后就是求相应二分图的最小顶点覆盖,也即二分图的最大二分匹配。由于前面我的博客已经写了这道题的详细分析,在这里就不分析了,下面是代码:#include #include #include #define Max 501int N,K;bool vi[Max];int pre[Max];bool match[Max]原创 2013-10-27 11:19:18 · 485 阅读 · 0 评论 -
二叉树
要谈二叉树,先要谈树的定义,因为二叉树是树的的特例。以下是树的定义:树由根结点和一系列子树组成,而子树又由根结点和一系列子树构成。既没有根结点也没有子树的树称为空树。树有且仅有一个根结点(即没有直接前驱的结点),还存在叶子结点(没有直接后驱的结点),和分支结点(除掉上述两种结点外的结点)。那么二叉树的定义就是将上述定义中的一系列子树改为两个子树。而二叉树又可以分为满二叉树和完全二叉原创 2013-10-22 18:44:34 · 539 阅读 · 0 评论 -
二部图总结
今天总结一下二部图,那么首先谈一下二部图的用处,首先谈一下二部图的最大匹配一下是代码模型#include #include #include #define Max 100bool match[Max][Max];int pre[Max];bool vi[Max];int find(int x);int n,m,k;int main(){ while(原创 2013-09-08 21:55:47 · 1834 阅读 · 0 评论 -
二分图小结-poj.3020
本题的意思是在一张图上有一些点,点代表城市,有一种网络它可以覆盖它所在位置以及临近的四个方向中的一个,现要求将所有的城市覆盖,问最小的网络数为多少?,大概的意思就是这样的,我用了两种方法做这道题目,第一种方法为dfs,思路很简单,就是枚举的思想,对于每个城市,要么没有直接覆盖,要么有直接覆盖,且为四个方向中的一种,对于不是城市的点直接跳过就可以了,那么这道题目的时间复杂度就是O(n^5),其中n为原创 2013-10-27 22:24:50 · 666 阅读 · 0 评论 -
哈夫曼编码
要谈哈夫曼编码,先简单介绍一下编码的概念:对现实生活中非二进制码信息的二进制表示,通俗一点讲就是将生活中的各种信息用机器语言也即二进制语言来表示,那么对于每一个信息,我们就需要赋予它一个二进制码,当然对于不同的信息赋予相同位数的不同二进制代码,这样做可以,比如说:有a,b,c,d四个数字,那么我们需要用二个二进制码来表示,因为n个二进制码可以唯一标识2^n种,那么相应的我们可以分别用00,01原创 2013-11-01 11:37:00 · 1262 阅读 · 0 评论 -
图的邻接矩阵
直接给图的邻接矩阵代码://图的两种创建方法-邻接矩阵、邻接表//邻接矩阵#include #include #define Inf 10000000//无穷大#define Max 20 //图中顶点个数最多为20typedef char type_data;typedef enum type_grap{DG,UDG,DN,UDN};typedef struct grap原创 2013-11-05 22:38:03 · 1069 阅读 · 0 评论 -
图的邻接矩阵和邻接表表示法
链表是一种线性存储结构,是一对一对应关系。而树是一种层次存储结构,是一对多的对应关系。而图则是一种关系存储结构,是多对多对应关系。树和图类似于数据库中的层次模型和关系模型。图的存储结构主要有两种,分别为邻接矩阵和邻接表法,其中邻接表较难,但本质相同,都是记录结点与其邻接结点,只是方法不同而已。下面分别讨论邻接表和邻接矩阵的思想。邻接表的思想是:定义三个结点,分别为表结点,头结点,邻接表结点,表结点原创 2013-11-23 16:53:35 · 4142 阅读 · 0 评论 -
串的相关操作——自定义
今天写了一下串的一些常用的库函数的自定义版本。比如strlen(),strcpy(),char *strcat(char *,char *),strstr(char *,char *)等函数。下面是我的代码,当然可能与标准函数库STL中提供的库函数功能有所不同。但大致的内容是一样的,只是细节可能不同而已。下面是代码://串的表示、实现和基本操作//求串长StrLength()\ 插入运算原创 2013-11-22 18:27:33 · 840 阅读 · 0 评论