- 博客(8)
- 收藏
- 关注
翻译 Dijkstra算法
问题描述:从一个顶点出发到达另一个顶点所经过边的权重和最小的路径,称为最短路径。 算法详解: 1.声明两个集合,S,U;S集合中放已算出最短路径的点,(初始时,S集合中只有顶点V1)。U集合中放尚未确定最短路径的点。 2.在声明一个数组dis【】记录顶点V1到各个点之间的初始距离,dis[0]表示V1到V1的距离,记dis[0]=0,dis[1]表示V1到V2的距离,如果V1和某个顶点Vk之...
2018-08-25 12:55:22 179
翻译 DAG上的最长路
最长路问题分为两种: 1.求整个DAG上的最长路(不固定起点和终点) 2.固定终点 ,求DAG上的最长路 首先看第一种,用dp[i]来代表从i结点出发能到达的最长路长度。i结点可以到达j1,j2,j3…….jk结点,则dp[i]=max(dp[i],map[i,j]+dp[j]),(j=j1,j2,j3…..jk)map[i][j]代表i,j两结点间的长度。如何用代码来实现啦。int D...
2018-08-23 16:08:41 951
原创 最优子结构与记忆化搜索
源于对算法竞赛一书的理解最优子结构:先来看一个数塔 从最顶部的结点出发,每次可以向左或者向右走一格,走到最底部时把沿途经历的结点全部加起来,如何走才能和最大。 可以用一个二维数组a(i,j)记录这张数塔图,每一个结点的位置(i,j),都可以看作是一个状态,则从当前状态出发,下一个状态可以是(i+1,j)或者是(i+1,j+1),而题目就是求从状态(0,0)出发,不断的状态进行转移,转移到最...
2018-08-22 21:43:45 363
原创 hdu1213
设有一个序列(a1,a2,a3,a4…….,ak)最长连续子序列肯定是以其中一个ai结尾,所以我们就把每一个以ai(i=1,2,3,4…..,k)结尾的最长连续子序列计算出来,最后我们for循环从1到k枚举dp【i】,(这里dp[i]是指以a[i]结尾的最长连续子序列和)就可以得出最长连续子序列的和了,求解dp[i]的递推公式,dp[i]=max(dp[i-1]+num[i],num[i]);以h...
2018-08-21 11:41:11 225
原创 动态规划最大公共子序列递推式以hdu1243为例
首先设序列A{a1,a2,a3,a4,a5……,an},序列B{b1,b2,b3,b4…….,bn}。Les(x,y)表示序列A{a1,a2,a3,a4,a5……,ax}和序列B{b1,b2,b3,b4…….,by}的最大公共子序列长度。 并且设一个最大公共子序列为t 则当ax==by时,就确定了ax,by一定是属于最大公共子序列中的元素,所以Les(x,y)=Les(x-1,y-1)+1 a...
2018-08-12 22:37:41 264
原创 堆
堆分为两种,大根堆:任何一个子树的根节点是子树中的最大值 。小根堆:任何一个子树的根节点是是子树的最小值。应用堆结构解决贪心问题很有效果,具体方法后续再更新。 对堆结构的两种操作: heapinsert:插入一个新节点,调整建堆。 void heapinsert(int arr[],int index) { while(arr[index]>arr[(index-1)/2]...
2018-08-09 20:44:53 131
原创 hdu1253bfs解题报告
这道题,如何把三维的立体图信息存放在程序当中是关键,运用了三维数组,map[x][y][z];输入的时候三个for循环就可以搞定了。由于题目是以x为变量分为第0块,第一块,第二块,所以最外层以x为循环变量。解决了这 个,接下来就是和bfs常用做法一致了,父节点(0,0,0)先入队,有六个方向可以走,所以在判六个方向的子节点符不符合入队条件:不能越界(这里有一种方法是把最外层一圈全部设置成墙,那样就...
2018-08-09 10:35:32 126
原创 HDU1548解题报告
这道题运用bfs的方法,首先每一层可以摁up或者down,所以每一个节点可以扩展出两个节点。先把起始层节点入队,为了防止在之后重复拓展此节点,将在标记为true,之后在提取出头结点,并将其删除。同时将其的两个子节点入队。重复以上操作。如果最后出现节点==B(目标层数),则寻找成功,返回time【next】,函数调用结束,否则如果执行到最后,一直没有到达目标层数,则返回-1。这里要特别注意一点,就是...
2018-08-07 19:19:48 314
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人