
算法
文章平均质量分 64
Apoised
我将一直前行,即使那时身边空无一人。
展开
-
bfs
bfs (广搜)利用队列:先将初始状态添加到队列里,此后从队列的最前端不断取出状态,将相邻但尚未访问的状态加入队列,直至队列被取空或找到问题的解。搜索顺序:距离初始状态由近及远的顺序应用:最短路径,最少操作/* Vs 起点 Vd 终点 */bool BFS(Node& Vs, Node& Vd){//常用结构体 queue Q; Node Vn, Vw; int i;原创 2016-03-29 19:43:45 · 372 阅读 · 0 评论 -
cf (dfs,floyd,并查集). New Year Book Reading
B -New Year PermutationDescriptionUser ainta has a permutationp1, p2, ..., pn. As the New Year is coming, he wants to make his permutation as pretty as possible.Permutationa1, a2, ..., anis...原创 2016-09-25 17:53:33 · 336 阅读 · 0 评论 -
最小生成树 hdu 1233 (还是畅通工程)
还是畅通工程(最小生成树)还是畅通工程Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 40243Accepted Submission(s): 18286Problem Des...原创 2016-08-04 11:14:46 · 255 阅读 · 0 评论 -
01背包 hdu 2564(饭卡)
饭卡Problem Description电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。...原创 2016-08-15 20:06:59 · 249 阅读 · 0 评论 -
dp
动态规划通常基于一个递推公式及一个或多个初始状态,当前子问题的解可由上一次子问题的解推出。是通过组合子问题的解而解决整个问题的。并且子问题不相互独立。一般可分为线性动规,区域动规,树形动规,背包动规四类。最基础dp:数塔数塔Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/原创 2016-08-08 20:13:09 · 203 阅读 · 1 评论 -
二分图 匈牙利算法 hdu 2063(过山车)
二分图匹配,解决配对问题。算法详解eg:过山车Problem DescriptionRPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了。可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐。但是,每个女孩都有各自的想法,举个例子把,Rabbit只愿意和XHD或PQK做partner...原创 2016-08-17 16:10:14 · 323 阅读 · 0 评论 -
拓扑排序
在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足以下条件时,称为该图的一个拓扑排序。1.每个顶点出现且出现一次。 2.若A在序列中排在B的前面,则在途中不存在从B到A的路径。步骤:1.从有向图中选取一个没有先驱的顶点并且输出。2.删除所有以他为尾的弧。3.重复1.2,知道全部顶点已经输出,或者图中不存在没有先驱的点(有环)方式:1.二维数组。2.临界表。原创 2016-08-05 16:22:26 · 209 阅读 · 0 评论 -
最短路
最短路:1.Floyd算法三重循环。void floyd(){ for (int k=0;k<n;k++){//中间点 for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ map[i][j]=min(map[i][k]+map[k][j],map[i][j]);//比较i到j直接还是间接快,并更新 } } }}原创 2016-08-04 21:13:57 · 164 阅读 · 0 评论 -
最小生成树
最小生成树:给定一个无向图,如果他的某个子图中任意两个顶点都互相连通并且是一棵树,那么这棵树就是生成树,使得边权和最小的生成树为最小生成树。1.Prim算法(贪心+更新)从点入手,任选一个顶点开始遍历,每次贪心的选取和其他顶点相连的权值最小的点,不断更新最小权值和顶点。int vis[M];//标记顶点是否访问过 int dis[M]; //记录最小权值int s[M][M];//原创 2016-08-04 09:29:38 · 192 阅读 · 0 评论 -
二分
二分搜索不断缩小解可能存在的范围,从而求得最优解。原创 2016-07-26 21:26:07 · 203 阅读 · 0 评论 -
dfs
dfs (深搜)尽可能“深”的在图中进行搜索:从V点开始,若有相邻且未遍历的顶点,访问此点,若无,返回上一节点,直至遍历了所有的点。核心:递归步骤:1.判断 2.遍历模板://判断 bool Check(int x,int y) //约束条件判断,包括边界判断 { if(!vis[x][y] && ...) // 满足条件 r原创 2016-03-28 21:30:53 · 349 阅读 · 0 评论 -
并查集
并查集,是对不相交集合的合并查找。主要步骤1, 合并不相交集合2, 判断两个集合是否有相同的根3, 优化:路径压缩模板1,初始化初始化father:各个节点独立成树,并且其father[i]=i,也就是其父节点就是其自身;初始化rank:各个节点为根节点,所以高度都为1,rank[i]=1。2,查找find_set(x) 判断两个集合是否同根。3,合原创 2016-03-23 07:16:12 · 314 阅读 · 0 评论 -
匈牙利算法zzuli oj 1159(寻宝)
匈牙利算法模板 原题Description晴天也来寻宝啦,有一个m层的宝塔,只能从第一层开始一层一层的往上走,每层都有一个门,你需要用钥匙来打开门才能继续走,现在晴天有n把钥匙,编号为0-n-1,然后他要开始寻宝了。没有特殊技能怎么好意思出来寻宝呢,他现在有两个天赋技能,他知道第i层的门可以用编号为a和b的钥匙打开(可能a等于b呦),然后他还可以在进入宝塔前把门的顺序任意调换一次,...原创 2016-08-17 15:05:11 · 730 阅读 · 0 评论