
算法与数据结构
china8848
做最优秀的自己
展开
-
Pku acm 2752 Seek the Name, Seek the Fame数据结构题目解题报告(二十)----kmp算法
关于kmp算法,大家都非常熟悉,其涵义非常难懂,以至于我学习kmp算法的时候一直怀疑自己的智商,其具体思想,这里就不多说了,网上也有很多资料,我用的是严蔚敏老师的书,实现也是按说上的方法实现的,推荐大家把kmp算法彻底弄明白了再做poj相关的几道题:2406 Power Strings 1961 Period 2752 Seek the Name, Seek the Fame。该题的题意是这样原创 2008-04-29 15:43:00 · 3118 阅读 · 1 评论 -
Pku acm 1423 Big Number 解题报告----求n!的位数
题目要求n!有几位,由于n最大可以到10^7,一般的方法是不可以的,然后推导以下公式:n!=n*(n-1)*(n-2)*…..*1N的位数=[lg(N)]+1;所以:n!的位数=[lg(n*(n-1)*(n-2)*…..*1)]+1=[lgn+lg(n-1)+lg[n-2]+….+lg1]+1;由于题目要计算很多数,所以如果每次都重新算会有很多重复,会超时,所以我们想办法保存中间的原创 2008-04-05 23:08:00 · 3966 阅读 · 2 评论 -
Pku acm 1014 Dividing 动态规划题目解题报告(十七)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1014刚AC了,趁热打铁,写下解题报告,这道题很早就在joj上做过,当时不知道dp,只会用很菜的方法,结果即使joj这道题仅要求10s还是会超时!思想:本题是找按价值均分大理石的方案是否存在,由于分配时不能破坏大理石,所以有个显而易见的剪枝:当所有的大理石的总价值为奇数时肯定不能被均分。把问题转化一原创 2008-01-07 10:49:00 · 5750 阅读 · 3 评论 -
Pku acm 1316 Self Numbers 解题报告
题目中定义了Self Numbers,例如,对于33,33+3+3=39,这个39就叫做Self Numbers,题目要求写出10000以内的Self Numbers。这道题最初在joj上做过,如果给一个数判断是不是Self Numbers,似乎不好下手,在这道题我们采用另一种思维方式,由于一个数一定小于它的Self Numbers,所以从1到10000,计算出它的Self Numbers,然后保原创 2008-03-31 21:40:00 · 2147 阅读 · 0 评论 -
Pku acm 1338 Ugly Numbers 动态规划解题报告(二十一)
本题要求写出前1500个仅能被2,3,5整除的数。最初的想法是从1开始检验该数是否只能被2,3,5整除,方法是这样的,对于一个数,如果它能被2整除,就除以二,如果它能被3整除,就除以三,如果它能被5整除,就除以五,直到不能被2,3,5整除,看结果是不是1,如果是1就满足条件,否则不满足条件。但是第1500个数大约近10亿,显然是1s内不可以完成的。然后仔细分析发现:满足条件的数是2^x*3原创 2008-04-01 19:59:00 · 3377 阅读 · 4 评论 -
Pku acm 2075 Tangled in Cables数据结构题目解题报告(十一)最小生成树:prim算法&二叉查找树
典型的最小生成树算法,题目给出图的邻接矩阵,要求输出最小生成树对应的权值和,本例用prim算法实现。对于图,其生成树中的边也带权,将生成树各边的权值总和称为生成树的权,并将权值最小的生成树称为最小生成树(Minimun Spanning Tree),简称为MST。有两种非常典型的算法:Prim算法和kruskal算法,这两种算法都采用了贪心策略。Prim算法的基本思想是:(1) 在图G=(V,原创 2008-03-31 21:25:00 · 2027 阅读 · 1 评论 -
Pku acm 2418 Hardwood Species 排序算法解题报告(六) ----二叉查找数(BST)
题意就是输入几组字符串,按照字典顺序输出,并且输出每个字符串在总字符串中的比例。由于题目中处理了大量的字符串,这里采用了二叉查找树(BST)来解决本题。二叉查找树(BST)也称为二叉搜索树,二叉查找树或者是一棵空树,或者是具有下列性质的二叉树: 1、每个结点都有一个作为查找依据的关键码(key)。 2、左子树(如果存在)上所有结点的关键码都小于等于根结点的关键码。 3、右子树(如果存在)上所有原创 2008-03-31 21:12:00 · 1422 阅读 · 1 评论 -
Pku acm 2503 Babelfish 查找算法解题报告(一) ----二叉查找数(BST)
题意就是输入几组对应的字符串,其中一个是English,另一个是foreign language,开始是输入“字典”,然后是根据foreign language查询“字典”,没有时输出”eh”.由于题目中处理了大量的字符串,这里采用了二叉查找树(BST)来解决本题。二叉查找树(BST)也称为二叉搜索树,二叉查找树或者是一棵空树,或者是具有下列性质的二叉树: 1、每个结点都有一个作为查找依据的关原创 2008-03-31 21:01:00 · 2328 阅读 · 3 评论 -
Pku acm 1631 Bridging signals 动态规划题目解题报告(十三)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1631这个题目可以转化为最长上升子序列,这样这个题目似乎就和2533 Longest Ordered Subsequence 1887 Testing the CATCHER一样了,迅速写下代码,结果超时!看来只能用O(nlogn)的算法了。在O(n^2)的算法中:创建一个一维数组array[j]原创 2008-01-03 01:23:00 · 2070 阅读 · 3 评论 -
Pku acm 1887 Testing the CATCHER 动态规划题目解题报告(十一)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1887题目叙述很繁琐,其实就是求最长下降子序列,这一类题也是动态规划的典型题。这类问题有两种算法,一种 T(o) = O(n^2),另一种T(o) = O(nlogn),这里用第一种,在1631 Bridging signals的解题报告中介绍第二种。创建一个一维数组num_array[j],max原创 2008-01-03 00:33:00 · 1422 阅读 · 0 评论 -
Pku acm 1050 To the Max 动态规划题目解题报告(十六)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1050题目的意思很简单,在一个矩阵里面找它的子矩阵,使得子矩阵数值之和到达最大。其实就是最大子段和问题在二维空间上的推广。先说一下一维的情况吧:设有数组a0,a1…an,找除其中连续的子段,使它们的和达到最大。假如对于子段:9 2 -16 2 temp[i]表示以ai结尾的子段中的最大子段和。在已知t原创 2008-01-03 10:16:00 · 5036 阅读 · 4 评论 -
Pku acm 1088 滑雪 动态规划题目解题报告(十五)
http://acm.pku.edu.cn/JudgeOnline/problem?id=10881 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-原创 2008-01-03 10:09:00 · 2842 阅读 · 0 评论 -
Pku acm 2159 Ancient Cipher 排序算法解题报告(六)----计数排序
题目讲的很复杂,其实就是只要两个字符串中出现的字母的种类数和次数是一样的就YES,例如:JWPUDJSTVP----------11111122VICTORIOUS----------11111122六个字母出现一次,两个字母出现两次,符合要求。这样就转化为简单的排序了,用A1[]表示第一个字符串中的字符,A1[1],A1[2]分别表示A B出现的次数,以此类推,用A2[]表示原创 2008-04-05 22:52:00 · 2149 阅读 · 5 评论 -
Pku acm 1160 post office 动态规划题目解题报告(十八)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1160题目给出m个村庄及其距离,给出n个邮局,要求怎么建n个邮局使代价最小。思路:用opt[i][j]记录把前i个邮局建到前j个村庄中的最优解,用cost[i][j]记录所有在i到j村庄中,建1个邮局的最小代价。显然邮局应该设到中点。让前i个邮局覆盖前j个村庄,第i+1个邮局覆盖第j+1至j+k个村原创 2008-01-12 16:57:00 · 3905 阅读 · 2 评论 -
Pku acm 1179 Polygon 动态规划题目解题报告(二十)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1179多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。游戏第1步,将一条边删除。随后n-1步按以下方式操作:(1)选择一条边E以及由E连接着的2个顶点V1和V2;(2)用一个新原创 2008-01-12 17:11:00 · 1780 阅读 · 0 评论 -
Pku acm 1466 Girls and Boys数据结构题目解题报告(十七)---- 匈牙利算法求二分图的最大匹配
阅读本文前请先阅读我blog的另一篇文章:匈牙利算法求二分图的最大匹配(2008-4-12).有了匈牙利算法的基础,该题就是一道非常简单的题目了:题目给出一些boy和girl,有一些人有罗曼史,比如A和B有罗曼史,那么B和A就有罗曼史,求最多有多少人,他们之间没有罗曼史,根据这样的规则构建一个二分图:boy和girl分两边,分别作为左右结点,根据规则如果有罗曼史就连接,否则不连接,求出最大匹配原创 2008-04-29 10:55:00 · 2963 阅读 · 0 评论 -
Pku acm 1961 Period数据结构题目解题报告(十九)----kmp算法
关于kmp算法,大家都非常熟悉,其涵义非常难懂,以至于我学习kmp算法的时候一直怀疑自己的智商,其具体思想,这里就不多说了,网上也有很多资料,我用的是严蔚敏老师的书,实现也是按说上的方法实现的,推荐大家把kmp算法彻底弄明白了再做poj相关的几道题:2406 Power Strings 1961 Period 2752 Seek the Name, Seek the Fame。该题的题意是这样原创 2008-04-29 14:22:00 · 3776 阅读 · 6 评论 -
Pku acm 2406 Power Strings数据结构题目解题报告(十八)----kmp算法
关于kmp算法,大家都非常熟悉,其涵义非常难懂,以至于我学习kmp算法的时候一直怀疑自己的智商,其具体思想,这里就不多说了,网上也有很多资料,我用的是严蔚敏老师的书,实现也是按说上的方法实现的,推荐大家把kmp算法彻底弄明白了再做poj相关的几道题:2406 Power Strings 1961 Period 2752 Seek the Name, Seek the Fame。该题的题意是这样原创 2008-04-29 11:57:00 · 4363 阅读 · 7 评论 -
Pku acm 3041 Asteroids 数据结构题目解题报告(十六)---- 匈牙利算法求二分图的最大匹配
阅读本文前请先阅读我blog的另一篇文章:匈牙利算法求二分图的最大匹配(2008-4-12).题目给出一个矩阵,上面有敌人,每个子弹可以打出一横行或者一竖行,问最少用多少子弹消灭都有敌人,如:X.X .X. .X.x表示敌人,显然用两个子弹就可以解决所有敌人。下面介绍一下二分图的最小点覆盖数:假如选了一个点就相当于覆盖了以它为端点的所有边,你需要选择最少的点来覆盖所有的边。Köni原创 2008-04-12 23:50:00 · 2748 阅读 · 3 评论 -
Pku acm 2771 Guardian of Decency 数据结构题目解题报告(十五)---- 匈牙利算法求二分图的最大匹配
阅读本文前请先阅读我blog的另一篇文章:匈牙利算法求二分图的最大匹配(2008-4-12).有了匈牙利算法的基础,该题就是一道非常简单的题目了:题目给出一些boy和girl,有一些规则他们在一些条件下可能恋爱,求最多有多少人,他们之间不会恋爱,根据这样的规则构建一个二分图:boy和girl分两边,分别作为左右结点,根据规则如果满足可能恋爱的条件就连接,否则不连接,求出最大匹配,N-max_n原创 2008-04-12 23:48:00 · 1745 阅读 · 0 评论 -
Pku acm 2536 Gopher II 数据结构题目解题报告(十四)---- 匈牙利算法求二分图的最大匹配
阅读本文前请先阅读我blog的另一篇文章:匈牙利算法求二分图的最大匹配(2008-4-12).有了匈牙利算法的基础,该题就是一道非常简单的题目了:该题给出m个动物的地点,n个洞,还有速度和时间(其实就是给了距离),问m个动物最多能有几个在规定的时间里一规定的速度躲到洞里逃生,。典型的二分图匹配的问题,动物的位置为左边的结点,洞为右边的结点,如果他们的距离小于等于时间×速度,我们就认为他们是连接原创 2008-04-12 23:47:00 · 1841 阅读 · 0 评论 -
Pku acm 1274 The Perfect Stall 数据结构题目解题报告(十三)---- 匈牙利算法求二分图的最大匹配
阅读本文前请先阅读我blog的另一篇文章:匈牙利算法求二分图的最大匹配(2008-4-12).有了匈牙利算法的基础,该题就是一道非常简单的题目了:根据题意构建一个二分图,我们只要计算最大二分图匹配数,即为要求的结果。带有详细注释的代码可以在http://download.youkuaiyun.com/user/china8848/获得原创 2008-04-12 23:45:00 · 1407 阅读 · 1 评论 -
Pku acm 2239 Selecting Courses 数据结构题目解题报告(十二)---- 匈牙利算法求二分图的最大匹配
阅读本文前请先阅读我blog的另一篇文章:匈牙利算法求二分图的最大匹配(2008-4-12).有了匈牙利算法的基础,该题就是一道非常简单的题目了:该题给出P门课程,每门课程有不同的时间,问一个学生,最多一周能上几门课。典型的二分图匹配的问题,左边的结点为课程,右边结点为不同的时间(最大12*7个),我们只要计算最大二分图匹配数,即为要求的结果。带有详细注释的代码可以在http://down原创 2008-04-12 23:44:00 · 1346 阅读 · 0 评论 -
Pku acm 1469 COURSES 数据结构题目解题报告(十一)---- 匈牙利算法求二分图的最大匹配
阅读本文前请先阅读我blog的另一篇文章:匈牙利算法求二分图的最大匹配(2008-4-12).有了匈牙利算法的基础,该题就是一道非常简单的题目了:该题给出P门课程,N个学生,问能否从中选出P个学生,使每个学生上不同的课,且每个课程有一个学生。典型的二分图匹配的问题,我们只要计算最大二分图匹配数,如果和课程数相同就输出YES,否则输出NO。带有详细注释的代码可以在http://downloa原创 2008-04-12 23:39:00 · 1968 阅读 · 0 评论 -
匈牙利算法求二分图的最大匹配
该文根据http://imlazy.ycool.com/post.1603708.htmlhttp://blog.edu.cn/user3/Hailer/archives/2007/1829623.shtml总结而来,向以上两位作者表示感谢。二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y。给定一个二分图G,M为G边原创 2008-04-12 22:25:00 · 22395 阅读 · 8 评论 -
Pku acm 1125 Stockbroker Grapevine 动态规划题目解题报告(十九)
Pku acm 1125 Stockbroker Grapevine 动态规划题目总结(十九)http://acm.pku.edu.cn/JudgeOnline/problem?id=1125有向图中每一对顶点间的最短路径问题,典型的弗洛伊德算法。问题描述:已知一个含有n个顶点的各边权值均大于0的带权有向图,对每对顶点vi!=vj,要求求出每一对顶点之间的最短路径和最短路径长度。 解决原创 2008-01-12 17:09:00 · 1471 阅读 · 0 评论 -
Pku acm 1007 DNA Sorting 排序算法解题报告(五)----求逆序数 排序
什么是逆序数:跟标准列相反序数的总和,比如说,标准列是1 2 3 4 5,那么 5 4 3 2 1 的逆序数算法:看第二个,4之前有一个5,在标准列中5在4的后面,所以记1个,类似的,第三个 3 之前有 4 5 都是在标准列中3的后面,所以记2个,同样的,2 之前有3个,1之前有4个 将这些数加起来就是逆序数=1+2+3+4=10。再举一个 2 4 3 1 5 。4 之前有0个 3 之原创 2008-03-29 00:45:00 · 4402 阅读 · 2 评论 -
Pku acm 2299 Ultra-QuickSort 排序算法解题报告(四)----归并排序(MegerSort)求逆序数
什么是逆序数:跟标准列相反序数的总和,比如说,标准列是1 2 3 4 5,那么 5 4 3 2 1 的逆序数算法:看第二个,4之前有一个5,在标准列中5在4的后面,所以记1个,类似的,第三个 3 之前有 4 5 都是在标准列中3的后面,所以记2个,同样的,2 之前有3个,1之前有4个 将这些数加起来就是逆序数=1+2+3+4=10。再举一个 2 4 3 1 5 。4 之前有0个 3 之原创 2008-03-29 00:27:00 · 5368 阅读 · 3 评论 -
Pku acm 2371 Questions and answers 排序算法解题报告(三)----二叉查找数(BST)排序
题意给定大量的整数,然后排序,要求输出第n个数是多少。由于题目中处理了大量的数,这里采用了二叉查找树(BST)来排序。二叉查找树(BST)也称为二叉搜索树,二叉查找树或者是一棵空树,或者是具有下列性质的二叉树: 1、每个结点都有一个作为查找依据的关键码(key)。 2、左子树(如果存在)上所有结点的关键码都小于等于根结点的关键码。 3、右子树(如果存在)上所有结点的关键码都大于等于根结点的关键原创 2008-03-28 23:51:00 · 1345 阅读 · 0 评论 -
插入排序,合并排序,堆排序,快速排序,计数排序的实现(算法导论)
插入排序#include #define MAX_SIZE 1000using namespace std;//插入排序,pa为指向数组的指针,n为数组元素个数void insert_sort(int *pa,int n){ int i,key,j; for(j=1;j { i=j; key=*(pa+i); while(i>原创 2008-03-22 21:52:00 · 1289 阅读 · 1 评论 -
二叉查找数的实现(算法导论)
//定义元素最大个数#define MAX_SIZE 100 #includeusing namespace std; int Root=0; //全局变量,根的索引int now_size=0; //定义元素当前最大的索引//分别定义关键字,父节点,左右孩子的数组为全局变量//结点下标从1开始,p,right,left值为0时表示为nul原创 2008-03-22 21:55:00 · 974 阅读 · 2 评论 -
Pku acm 2492 A Bug's Life数据结构题目解题报告(十)---- 并查集的应用
并查集:(union-find sets)是一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,其中最完美的应用是实现Kruskar算法求最小生成树。其实,这一部分《算法导论》讲的很精炼(第21章:用于不相交的集合)。并查集是一种可以方便地进行以下三种操作的数据结构:合并两个集合;将一元素并入另一集体;判断两个元素是否属于同一个集合原创 2008-03-17 22:39:00 · 1886 阅读 · 2 评论 -
Pku acm 1861 NetWork 数据结构题目解题报告(二) ----最小生成树:prim算法&Kruskal算法
典型的最小生成树算法,题目给出图的顶点以及所有边的权值要求输出最小生成树对应的边,我分别用prim算法和Kruskal算法实现,结果prim算法47ms,4364K ,Kruskal算法204ms,4148K,下面分别详细讲述:对于图,其生成树中的边也带权,将生成树各边的权值总和称为生成树的权,并将权值最小的生成树称为最小生成树(Minimun Spanning Tree),简称为MST原创 2008-03-06 22:01:00 · 2182 阅读 · 5 评论 -
Pku acm 3278 Catch That Cow数据结构题目解题报告(五) ----树的BFS
题目给出两个数a b,求由a经过加一,减一或乘二经过最小的步数n到b,输出n,例如:对于a=5,b=17 有:5-10-9-18-17, n=4.想到用树的BFS(广度优先遍历),建立一颗根为5的树,不断BFS,当出现17时结束即可。由于题目要求的数据很大,而且BFS过程中会出现很多重复的元素,所以过程中要不断剪枝,才能不至于超时。在该实现中,建立了先进先出的队列来存储新生成的节点,每一原创 2008-03-06 23:34:00 · 2786 阅读 · 4 评论 -
Pku acm 1258 Agri-Net数据结构题目解题报告(四) ----最小生成树:prim算法
典型的最小生成树算法,题目给出图的邻接矩阵,要求输出最小生成树对应的权值和,本例用prim算法实现。对于图,其生成树中的边也带权,将生成树各边的权值总和称为生成树的权,并将权值最小的生成树称为最小生成树(Minimun Spanning Tree),简称为MST。有两种非常典型的算法:Prim算法和kruskal算法,这两种算法都采用了贪心策略。Prim算法的基本思想是:(1) 在图G=(V,原创 2008-03-06 23:06:00 · 1454 阅读 · 0 评论 -
Pku acm 2485 Highways数据结构题目解题报告(三) ----最小生成树:prim算法
典型的最小生成树算法,题目给出图的邻接矩阵,要求输出最小生成树对应的权值和,本例用prim算法实现。对于图,其生成树中的边也带权,将生成树各边的权值总和称为生成树的权,并将权值最小的生成树称为最小生成树(Minimun Spanning Tree),简称为MST。有两种非常典型的算法:Prim算法和kruskal算法,这两种算法都采用了贪心策略。Prim算法的基本思想是:(1) 在图G=(原创 2008-03-06 22:20:00 · 1965 阅读 · 0 评论 -
Pku acm 1125 Stockbroker Grapevine 数据结构题目解题报告(八)---- 弗洛伊德(floyd)算法
有向图中每一对顶点间的最短路径问题,典型的弗洛伊德算法。问题描述:已知一个含有n个顶点的各边权值均大于0的带权有向图,对每对顶点vi!=vj,要求求出每一对顶点之间的最短路径和最短路径长度。 解决方案:弗洛伊德(floyd)算法 3原创 2008-03-07 11:48:00 · 1532 阅读 · 0 评论 -
Pku acm 1062 昂贵的聘礼 数据结构题目解题报告(七)—单源最短路径:Dijkstra算法
题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1062基本思想:增加一个起点S, 若某物品Ai的价格为Pi, 添一条权值为Pi的边S-->Ai若物品Aj可以用Ai加优惠价Qi换得,加权值为Qi的边Aj-->Ai,对于题目中提到的等级限制也是该题的一个难点,假如酋长的rank=10,等级限制M=5,那么可以参与交易的等级有以下6种可能:5原创 2008-03-07 11:41:00 · 2783 阅读 · 2 评论 -
Pku acm 2253 Frogger数据结构题目解题报告(六)—单源最短路径:Dijkstra算法
单源最短路径问题和Dijkstra算法:单源最短路径问题描述:给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数。另外,还给定 V 中的一个项点,称为源。现在我们要计算从源到所有其他各项点的最短路径长度。这里的长度是指路上各边权之和。这个问题通常称为单源最短路径问题。Dijkstra算法基本思想:Dijkstra算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置原创 2008-03-07 10:36:00 · 3016 阅读 · 0 评论 -
Pku acm 1163 the Triangle 动态规划题目解题报告(一)
Pku acm 1163 the Triangle 动态规划题目总结(一)题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1163对于一个有数字组成的二叉树,求由叶子到根的一条路径,使数字和最大,如: 7 3 8原创 2008-01-01 10:10:00 · 2100 阅读 · 0 评论