自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 圆排列问题

问题      圆排列问题:给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。解析      首先对于这个问题,使用分支限界计算,一定会遍历所有的排列情况,剪枝就是当前的排列如果比之前的排列反而长,就会去除这种情况以及他的子结点,达到了减少时间的目的,要取得最佳答案。      圆

2020-06-12 22:24:31 5542 1

原创 Note(读书笔记)

  首先在算法书的选择上,选择的是李煜东所著的《算法竞赛进阶指南》这本书,因为参加了学院的ACM竞赛实验室,这本书对本人的影响也很深,它涵盖了竞赛中大部分的算法,如基本算法二分、倍增、前缀和,简单的数据结构堆、字典树,DFS、BFS,博弈论,线段树、树状数组,动态规划、图论。仔细研究过的算法只是其中的一部分,最熟悉的就是图论部分了。  图论中讲了很多算法,比如最短路、最小生成树、二分图、tarjan算法、网络流等。学习完这些,最让人印象深刻的算法就是tarjan算法

2020-06-10 00:21:02 408

原创 图的m着色问题

问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答”NO”。解析四色猜想:四色问题是m图着色问题的一个特例,根据四色原理,证明平面或球面上的任何地图的所有区域都至多可用四种、颜色来着色,并使任何两个有一段公共边界的相邻区域没有相同的颜色。这个问题可转换成对一平面图的4-着色判定问题(平面图是一个能画于平面上而边无任何交叉的图)。将地图的每个区域变成一个结点,若两个区域相邻,则相应

2020-06-01 23:31:02 587 1

原创 动态规划之递推dp

Codeforces 429B B. Working out题意:在 n * m ( 3 ≤ n, m ≤ 1000 ) 的网格中,A从(1,1)点移动到(n,m)点,每次只能向下或者向右移动一格,B从(n,1)点移动到(1,m)点,每次只能向上或者向右移动一格,他们的速度不同,走到一个格子后可以获得相应的权值,当相遇于同一个网格时,他们都不会拿该权值,问 A 与 B 可以拿到的权值之和的最大值。分析:可以先dp出每个网格到四个角的最大权值,可以枚举每个网格为A与B相遇的格子,因为要使权值最大,所以要使

2020-05-18 23:52:09 416

原创 哈夫曼编码

问题代码(码字):Q{001,00,010,01}表示字符a,b,c,d同一序列:0100001产生两种译码(产生歧义):01 00 001;010 00 01二元前缀码:任何字符的代码不能作为其他字符代码的前缀利用二元前缀码译码:从第一个字符开始一次读入每个字符(0或1),如果发现独到的字串与某个码字相等,就将这个子串译作相应的码字:然后从下一个字符开始继续这个过程,直到读完输入的字符串为止。二元前缀编码存储:二叉树结构,每个字符作为树叶,对应这个字符的前缀码看作根到这片树叶的一条路径,每个节

2020-05-14 22:56:01 1037

原创 训练题解之5.6

E UVA-10766 Organising the Organisation题目大意:现有n个点,m条边,k为根节点,每条边代表边的两点有矛盾,不能相连,问存在多少生成树。题解:典型的生成树计数,首先处理出补图,然后跑一边生成树计数,根节点对本题无用,注意会出现重边。生成树计数主要依靠:基尔霍夫定矩阵树理。(证明略)基尔霍夫矩阵:对角线上的点的值为每个点的度数,其他点的值若i与j相连则为...

2020-05-06 16:22:11 217 1

原创 贪心之最大相容子集合问题

问题有n项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截至之间。如果任何两个活动不能同时进行,问如何选择这些活动,从而使得被安排的活动数量达到最多。解析贪心策略一:按照截止时间从小到大排序,之后从前往后挑选。实例:最大子集中的活动:1、4、8。最大的活动数量是3。答案正确。贪心策略二:按照开始时间从小到大排序,之后从前往后挑选。实例:最大子集中的活动:1、5。最大的活...

2020-04-28 23:20:49 2740

转载 动态规划总结

                                 &nbsp...

2020-04-26 22:13:24 447

原创 动态规划之最长公共子序(LCS)

问题给定两个序列X=<x1,x2,…,xm>和Y=<y1,y2,…,yn>,求X和Y长度最长的公共子序列。解析最长公共子序是动态规划的典型问题之一,可以依靠dp取得较暴力算法极为优秀的时间复杂度,在推导过程时会依靠S1=13456778,S2=357486782这组样例。其中会记录dp[i][j],表示S1中的1-i序列和S2中1-j序列的最长公共子序。...

2020-04-21 23:44:02 253

原创 动态规划之矩阵链乘法

问题给定n个矩阵的链<A 1 ,A 2 ,…,A n >,其中i=1,2,…,n,矩阵A i的维数为p i-1 ×p i 。求一个完全“括号化方案”,使得计算乘积A1 A2 …A n 所需的标量乘法次数最小。解析  对于矩阵链乘法问题,我们将所有对于1≤i≤j≤n确定Ai Ai+1 … j 的最小代价括号方案作为子问题。令m[i,j]表示计算矩阵A i,j 所需要的标量乘法的...

2020-04-14 21:43:24 340

原创 动态规划之投资问题

问题设m元钱,n项投资,函数f[i][x]表示将x元投入第i项项目所产生的效益,i=1,2,…,n.问:如何分配这m元钱,使得投资的总效益最高。解析对于动态规划的一般问题,首先要列出递推方程:设F[k][x]表示x万元投给前k个项目的最大效益,k=1,2,…,n,x=1,2,…,m。分析可得:递推方程:F[k][x]=max{f[k][j]+F[k-1][x-j]}, 0<=j&...

2020-04-08 23:36:24 2044

原创 分治法之第k小

问题在n个元素中找出第k小的元素。解析这是一种优秀的分治算法,下图中n个元素由小圆圈来表示,并且每一个组占一纵列。组的中位数用白色表示,而各中位数的中位数x也被标出。(当寻找偶数数目元素的中位数时,使用下中位数)。箭头从比较大的元素指向较小的元素,从中可以看出,在x的右边,每一个包含5个元素的组中都有3个元素大于x,在x的左边,每一个包含5个元素的组中有3个元素小于x。大于x的元素以阴影背景...

2020-03-31 22:29:08 2619

原创 分治法之最近对问题

问题n个点在二维平面内,求出所有点对的欧几里得距离最小的点对。解析在利用分治法思想解决此问题时,首先考虑将最近对问题进行分治,设计其分治策略。将集合S分成两个子集S1和S2,根据平衡子问题原则,每个子集中的点数大致都为n/2。这样分治后,最近点对将会出现三种情况:在S1中,在S2中或者最近点对分别在集合S1和S2中。利用递归分析法分别计算前两种情况,第三种方法另外分析。求解出三类子情况后,再...

2020-03-25 21:34:40 798

原创 归并排序

问题归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k。解析归并排序是一个典型的基于分治的递归算法。它不断地将原数组分成大小相等的两个子数组,最终当划分的子数组大小为1时,将划分的有序子数组合并成一个更大的有序数组。图解如下:原序列如上图。开始递归分治。直到递归到底,开始归并。排序完成。设计分治:把n个元素从中间切开,分成两部分。步骤骤1分成的...

2020-03-17 22:43:23 141

原创 查找算法之二分查找

问题在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0。解析对于这样的有序序列,可以使用二分查找的算法来实现。如下图序列,二分查找20。设计在有序表中,取中间数据作为比较对象,若给定值与中间记录的数值相等,则查找成功;若给定值小于中间值的数值,则在中间值的左半区继续查找;若给定值大于中间值的数值,则在中间值的右半区继续查找;不...

2020-03-12 00:00:09 439

原创 查找算法之二叉查找树

问题在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0。解析对于这样的有序序列,可以使用二叉查找树的数据结构。二叉搜索树是一种节点值之间具有一定数量级次序的二叉树,对于树中每个节点:若其左子树存在,则其左子树中每个节点的值都不大于该节点值。若其右子树存在,则其右子树中每个节点的值都不小于该节点值。这里以9为例,我们知道前驱一定比9小,那...

2020-03-11 23:54:30 513

原创 最短路之dijkstra算法

问题已知一张有向图,求出一个点到其他点的最短路径,也就是单源最短路径的问题。单源最短路问题是指给定一张有向图G=(V,E),V是点集,E是边集,|V|=n,|E|=m,节点以[1,n]之间的连续整数编号,(x,y,z)描述一条从x出发,到达y,长度为z的有向边。设一点为起始点,dist[i]表示从起点到i的最短路径长度。解析Dijkstra算法基于贪心思想,它只适用于所有边的长度都为非负整...

2020-03-04 10:31:25 321

原创 最短路之Floyd算法

问题已知一张有向图,求出每个点到其他点的最短路径,也就是多源最短路径的问题。解析Floyd算法的本质是一种动态规划的思想,它的转移方程为:mp[i,j]=min(mp[i,k]+mp[k,j],mp[i,j]),其中mp[i,j]代表从i点到j点的最短距离,所以可以枚举i点和j点,更新每个i到j的最短距离再枚举k,但是这样枚举计算mp[i,j],因为不能确定枚举的所有到k点为最短路径,一旦...

2020-03-04 10:22:08 248

原创 最小生成树之prim算法

1.问题现有一张n个点m条边的加权无向图,向该图中取出一些边构成最小生成树(MST)。最小生成树就是用n个点n-1条边组成一个极小连通子图,要求该生成树上的边权之和最小。问这个无向图的最小生成树的权值为多少。2.解析prim算法的核心是贪心,始终维护这样一颗最小生成树,不断向其中加边。大概步骤如下图:该图为原图此处设置起始点为1上图中红色的边为最终的最小生成树。3.设计...

2020-02-27 22:07:37 536

原创 最小生成树之kruskal算法

1.问题现有一张n个点m条边的加权无向图,向该图中取出一些边构成最小生成树(MST)。最小生成树就是用n个点n-1条边组成一个极小连通子图,要求该生成树上的边权之和最小。问这个无向图的最小生成树的权值为多少。2.解析首先使用kruskal算法,该算法的核心思想是贪心,把每个边根据权值从小到大排序,建立一个空图,然后遍历所有的边,当前的边的两个端点如果不在新图上或者在新图上不连通,就把这条边加...

2020-02-27 21:59:39 358

原创 codeforces图论训练

codeforces图论训练President’s Path codeForces-416E题目描述:给出n个点m条边的无向图,求出对于任意两点之间的所有最短路覆盖的边数。题目解析:首先题目数据范围较小,有500左右的点,首先可以用floyd预处理出任意两点之间的最短路,然后用 dp[i][j]表示有多少条与i相邻的边位于从i到j的最短路径上,计算出指向j的边中在从i到j最短路上的个数,...

2020-02-04 16:24:19 474

原创 并查集进阶

并查集进阶CodeForces - 1131D Gourmet choice题目描述:已知两个序列的大小n和m,告诉一个由’>’、’<‘和’='三种字符组成的n*m的字符串序列,s[i][j]表示n中第i个元素与m中第j个元素的大小关系。求出这两个序列中最大值最小的序列。思路:当“=”不存在时,这是一个简单的拓扑排序问题。而当“=”出现,拓扑排序不再适用。...

2020-01-13 16:52:35 193

转载 最短路径之图的储存(二)

图的储存-邻接表邻接表1.为什么要有邻接表可以想象如果有一个图他的顶点特别多而边只有一个?那么是不是用邻接矩阵特别浪费内存呢?所以需要邻接表(不同于邻接表主要以链表形式实现)2.怎么理解邻接表呢?首先看上面b图,最边上的表我们给他起名——顶点表;其他的我们给另外的变我们给他起名边表;3.顶点表顶点表用来开始储存图中的各个顶点,可以看到我们给顶点表开辟了两个域,第一个域存放了顶点了...

2018-12-09 00:21:46 195

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除