算法
文章平均质量分 50
漂流瓶终结者
这个作者很懒,什么都没留下…
展开
-
01背包
题目有N件物品和一个容量为V的背包。放入第i件物品耗费的费用是Ci,得到的价值是Wi。求解将哪些物品装入背包可使价值总和最大。基本思路最基础的背包问题,特点是:每种物品仅有一件,可选择放或不放用子问题定义状态:即F[i][v]=max(F[i-1][v],F[i-1][v-Ci]+Wi)详细解释一下该方程:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略...原创 2018-07-25 09:29:08 · 316 阅读 · 0 评论 -
快速幂算法
转载自:https://wenku.baidu.com/view/2384ecc02cc58bd63186bdf6.html我们先从简单的例子入手:求a^b mod c =?算法1:首先直接地来设计这个算法:int ans = 1;for (int i = 1;i <= b; i++){ ans = ans * a;}ans = ans % c; 这个算法的...转载 2018-08-03 10:58:39 · 369 阅读 · 0 评论 -
最少转机-图的广度优先遍历
题目描述:小哼和小哈一同坐飞机去旅游,他们现在位于1号城市,目标是5号城市,可是1号城市并没有到5号城市的直航。不过小哼已经收集了很多航班的信息,现在小哼希望找到一种乘坐方式,使得转机的次数最少,如何解决?输入:第一行输入n,m,n表示城市的数量,m表示城市间的的航线,城市编号从1-n。接下来m行输入每两个城市间的航线最后一行输入起点城市和终点城市样例:5 7...转载 2018-07-19 09:53:21 · 609 阅读 · 0 评论 -
堆-神奇的优先队列
摘自《阿哈!算法》一.堆的概念堆是一种特殊的完全二叉树,就像下面这棵树一样。我们发现这棵二叉树有一个特点,那就是所有的父结点都比子结点小。符合这样特点的完全二叉树我们称之为最小堆。反之,所有父结点都比子结点大的完全二叉树我们称之为最大堆。二.应用假如有14个数,分别是99,5,36,7,22,17,46,12,2,19,25,28,1和92,请找出这14个数中最小的数。...原创 2018-07-20 13:38:45 · 844 阅读 · 0 评论 -
犯罪团伙(并查集)
题目描述:快过年了,犯罪分子们也开始为年终奖"奋斗"作案了。小哼的家乡出现了多次抢劫事件。由于强盗人数过于庞大。作案频繁,警方想查清楚到底有几个犯罪团伙实在太不容易了,不过警察叔叔还是搜集到了一些证据,需要咱们帮忙分析一下:例:现在有10个强盗1号强盗与2号强盗是同伙3号强盗与4号强盗是同伙5号强盗与2号强盗是同伙4号强盗与6号强盗是同伙2号强盗与6号强盗是同伙...原创 2018-07-21 10:23:22 · 1233 阅读 · 0 评论 -
最小生成树 克鲁斯卡尔算法(Kruskal)
题目描述:输入:思路:代码:#include<bits/stdc++.h>#define MAX 105using namespace std;struct edge{ int u; int v; int w;}e[MAX];bool cmp(edge x,edge y){ return x.w<y.w;}...原创 2018-07-21 11:30:00 · 582 阅读 · 0 评论 -
图的割点算法与割边算法
图的割点在一个无向连通图中,如果删除某个顶点后,图不再连通(即任意两点之间不能相互到达),我们称这样的顶点为割点(或者称割顶)。上图中的2号顶点就是割点,因为删除2号后,4,5不通,1,6也不通。很容易想到的方法是:依次删除每一个顶点,然后用dfs或者bfs来检查图是否依然连通。如果删除某个顶点后,导致图不再连通,那么刚才删除的顶点就是割点。这种方法的时间复杂度是O(N(N+M...原创 2018-07-22 15:40:45 · 1807 阅读 · 3 评论 -
二分图最大匹配 匈牙利算法
目录二分图定义算法代码二分图定义如果一个图所有顶点可以被分成X和Y两个集合,并且所有边的两个顶点恰好一个属于集合X,一个属于集合Y,即每个集合内顶点没有边相连,那么此图就是二分图。算法代码#include<bits/stdc++.h>#define MAX 105using namespace std;int e[MAX][MAX],matc...原创 2018-07-23 10:19:39 · 168 阅读 · 0 评论 -
RMQ问题(区间求最值)
一.简介 RMQ是英文Range Maximun(Minimum) Query 的缩写,顾明思义是询问某个区间内的最大值或最小值。下面讲解RMQ的求解方法-ST算法。 ST算法通常用在多次询问一些区间的最值的问题中。相比于线段树,它的程序实现更简单,运行速度更快,它可以做到O(nlogn)的预处理,O(1)回答每个询问。 使用ST算法的条件是没有修改操作,因此它适用于没有修改操作...转载 2018-08-12 14:33:55 · 491 阅读 · 0 评论 -
因子和与因子个数
1.求因子和例题:Description求一个数的因子和很简单,所以小明很懒就想让你帮忙算一下区间a到b中哪个数的因子和最大,并输出这个数和他的每个因子。Input输入a和b,(0<a<=b<10^6).Output输出这个数和他的每个因子(相同情况输出最小的),因子从小到大输出。Sample Input1 10Sample Output...原创 2018-08-12 13:54:03 · 3210 阅读 · 0 评论 -
二分法求最大值最小化或最小值最大化问题
1.最小值最大化例题:题目描述 农夫约翰建造了一座有n(2<=n<=100000)间牛舍的小屋,牛舍排在一条直线上,第i间牛舍在xi(0<=xi<=1000000000)的位置,但是约翰的m(2<=m<=n)头牛对小屋很不满意,因此经常互相攻击,约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其它牛尽量远的牛舍。也就是要最大化最近的两头牛之间...原创 2018-08-05 12:46:30 · 4818 阅读 · 0 评论 -
几种常见的博弈算法
博弈问题的特点1.博弈模型为两人轮流决策的非合作博弈。即两人轮流进行决策,并且两人都使用最优策略来获取胜利2.博弈是有限的。即无论两人怎样决策,都会在有限步后决出胜负3.公平博弈。即两人进行决策所遵循的规则相同几种常见博弈类型问题1.巴什博弈1、问题模型:有一个堆物品,物品数量为n个,两个人轮流从这堆物品中取物品,规定每次至少取一个,最多取m个,最后取光者得胜。2、解决...转载 2018-08-04 16:36:05 · 14316 阅读 · 0 评论 -
最大连续子序列和 最优起点算法
算法思想: 设num[i]为和最大序列的起点,则如果num[i]是负的,那么它不可能代表最优序列的起点,因为任何包含num[i]作为起点的子序列都可以通过num[i+1]作起点而得到改进。代码int sum=0,maxsum=-1000; //考虑到序列全为负权的情况for(int i=1;i<=n;i++) //n为序列长度{ sum+=num[i]; ...原创 2018-08-04 12:46:55 · 658 阅读 · 0 评论 -
最短路径 三种算法
Dijkstra算法(单源无负权图)//适用于边权为正的情况,单源最短路问题//时间复杂度为O(V*V+E)//算法思路:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了)//不断的维护一个dis数组,最后得到的dis数组...原创 2018-07-23 09:45:25 · 982 阅读 · 0 评论 -
多重背包
题目基本算法for(int i=1;i<=N;i++){ for(int v=0;v<=V;v++) { for(int k=0;k<=Mi;k++) { F[i][v]=max(F[i][v],F[i-1][v-k*C[i]]+k*W[i]); } }}转...原创 2018-07-26 11:08:50 · 263 阅读 · 0 评论 -
完全背包问题
题目 有N种物品和一个容量为V的背包,每种物品有无限件可以使用。放入第i种物品的费用是Ci,价值是Wi。求解:将哪些物品装入背包,可使这些物品的耗费的费用总和不超过背包的容量,且价值总和最大。基本思路从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是取0件、1件、2件......直至取(V/Ci)件等多种策略。如果仍按照解01背包的思路,令F[i][v]表示前i种物品恰好...原创 2018-07-25 11:36:39 · 177 阅读 · 0 评论 -
Phone List(字典树)
DescriptionGiven a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let's say the phone catalogue listed these numbers:Emergency 911 Alic...原创 2018-08-08 13:00:19 · 549 阅读 · 0 评论