随笔分类 - 算法
摘要:题目:http://vj.acmclub.cn/contest/view.action?cid=316#problem/E 首先要理解题意:其实就是给你一个图让你判断有没有负权回路 因此直接用BallmenFord算法就可以了 特别注意一些问题:path是双向的因此要写两遍 代码: # includ
阅读全文
摘要:在Bellman-Ford算法中 我们可以看到大量的优化空间:如果一个点的最短路径已经确定了,那么它就不会再改变,因此不需要再处理。换句话说:我们每次只对最短路径改变了的顶点的所有出边进行操作使用一个队列就可以实现这个“轮流处理“的效果:具体操作:选取一个顶点,入队,枚举它的出边,进行松弛,把松弛后...
阅读全文
摘要:这题的思路还是比较简单,用弗洛伊德算法打表后,枚举来找到最小值代码如下 注意最后判断时候的语句 在这里错误了很多次# include# includeusing namespace std;int p[105][105];const int INF = 99999999;int n;void flo...
阅读全文
摘要:继续最短路径!说说Bellman—Ford算法思路:假设起点为s,图中有n个顶点和m个边,那么它到任一点(比如i)的最短路径最多可以有n-1条(没有回路就是n-1条);因为最短路径中不可能包含回路:如果有正权回路(正圈),那么最短路径肯定不走这个回路(不绕圈,绕圈会增加权值,直接走),如果有负权回路...
阅读全文
摘要:开始图论学习的第二部分:最短路径。由于知识储备还不充足,暂时不使用邻接表的方法来计算。最短路径主要分为两部分:多源最短路径和单源最短路径问题多源最短路径:介绍最简单的Floyd Warshall算法:思路如下:把所有从顶点i到j可能经过的顶点一一枚举,不断更新从i到j的最小权值:d[i][j] = ...
阅读全文
摘要:这周开始图论的学习第一天简要的了解一下图的概念,以及表示、储存的方法。主要就是邻接矩阵和邻接表两种方式 邻接矩阵就不说了比较好实现邻接表则主要用到不同的容器,比如vector。使用邻接表的主要思路是对每一个顶点都建立一个vector容器,当它和另一个顶点有边的时候就将该顶点的编号插入vector中,...
阅读全文
摘要:汶川大地震——HDU 2191简单的多重背包时间不多 最近拖拖拉拉 暂时没时间再深入理解动态规划了 把这个改成01背包简单贴一下代码。。。埋下了这样的坑# include# include# includeusing namespace std;//n,m,p,h,cint dp[105];int ...
阅读全文
摘要:今天开始看动规。从最基本的背包问题开始:首先是基本的01背包。简单的来说就是一个问题 可以分解成相似的若干个子问题 然后通过记录子问题的解来一步一步推出最终的最优解。这样做的好处就是:可以通过记录状态值 重复利用(记忆结果)来减少传统递归的次数 从而优化时间复杂度。动规中 最重要的莫过于列出对应的 ...
阅读全文
摘要:一上来看见题目就用了深搜(因为只会深搜)果断内存超限(据说时间也会超限)无奈只好开始用广搜其实广搜的思路和深搜有很多类似的地方 不过实现的过程中用到了队列 因此有点难以理解(好吧我个人认为)这题是最基本的广搜了 只是一个二叉树所以先画个二叉树出来看一下广搜的顺序每一个节点下一层的节点入队之后就把这个...
阅读全文
摘要:细节问题各种虐!!其实就是简单的一个深搜看成二叉树来理解:每个节点有两个枝:入栈和出栈。剪枝操作:只有当栈顶元素和当前位置的目标字符相同时才出栈,否则就不出栈dfs写三个参数:depth搜索深度,npush压栈数,npop出栈数npush用于记录压栈数:主要判断当前压栈是否合理,以及要压入的元素在原...
阅读全文
摘要:结束了三分搜索的旅程 我开始迈入深搜的大坑。。首先是一道比较基础的深搜题目(还是很难理解好么)POJ 1564 SUM IT UP大体上的思路无非是通过深搜来进行穷举、匹配为了能更好地理解深搜 可以尝试去画一下二叉树理解一下,查看遍历的路径代码还是百度到别人的自己再参悟- -佩服别人的功底啊先上代码...
阅读全文
摘要:开始算法基础学习的第一天今天学习的内容是三分搜索 相对来说很基础的内容(还是觉得脑子不够用)三分搜索主要用于凸函数查找极大值。(盗个图)如图所示 若要查找该函数的最大值 可以考虑和二分法一样的思路,即用L,R两个端点去不断地逼近这个最大点但是在这里仅用一个mid中值是不够的 因此添加了一个mmid ...
阅读全文

浙公网安备 33010602011771号