摘要: 今天为大家带来最小生成树的第二种实现方式,比起kruskal来说,prim相对要复杂一些,在稠密图的表现中表现较好,最优情况下也是nlogn级别. 描述: 1).输入:一个加权连通图,其中顶点集合为V,边集合为E; 2).初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew 阅读全文
posted @ 2020-02-10 17:42 remarkableboy 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 今天写一篇关于最小生成树的番外篇,以前写最小生成树总是用的prim,关于kruskal只是知道一些原理,一直也没有时间去学,今天偶然看了一些并查集,才想起了这个算法 会想起刚刚(预)学过的数据结构,来解释一下它的原理: 先构造一个只含 n 个顶点、而边集为空的子图,把子图中各个顶点看成各棵树上的根结 阅读全文
posted @ 2020-02-09 20:49 remarkableboy 阅读(163) 评论(0) 推荐(0) 编辑
摘要: N位同学站成一排,音乐老师要请其中的(N−KN-KN−K)位同学出列,使得剩下的KKK位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K1,2,…,K,他们的身高分别为T1,T2,…,TKT_1,T_2,…,T_KT1​,T2​,…,TK​, 阅读全文
posted @ 2020-02-08 20:37 remarkableboy 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 继上次讲完求LCS长度后,来更新一篇具体求LCS的求法。 in: abcicba abdkscab out: abca 我们已经知道lcs中的状态转移方程为: for(int i=0;i<=a;i++) { for(int j=0;j<=b;j++) { if(i==0||j==0) { dp[i] 阅读全文
posted @ 2020-02-07 21:00 remarkableboy 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 问题描述:给你一个字符串,问至少需要添加几个字符才能形成回文串。 in: 5Ab3bd out: 2 解释如:dAb3bAd 做法:将给出的字符串反向存一遍,然后找最长公共子序列,用原长减去该长度就是需要添加的字符数 由于长度n为[3,5000];开5000的二维数组会mle,所以我们用滚动数组,由 阅读全文
posted @ 2020-02-06 20:06 remarkableboy 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 题目描述: 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍 阅读全文
posted @ 2020-02-05 19:47 remarkableboy 阅读(168) 评论(0) 推荐(0) 编辑
摘要: The cows don't use actual bowling balls when they go bowling. They each take a number (in the range 0..99), though, and line up in a standard bowling- 阅读全文
posted @ 2020-02-04 20:54 remarkableboy 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 题目描述:给出两个字符串,求两个字符串的公共子序列(不是公共子串,不要求连续,但要符合在原字符串中的顺序) in: abcfbc abfcab programming contest abcd mnp out: 4 2 0 状态转移方程: 如果s1[i]==s2[j] 则 c[i][j]=c[i-1 阅读全文
posted @ 2020-02-03 19:36 remarkableboy 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 题目描述:求最长下降子序列的长度 in: 71 7 3 5 9 4 8 out: 4 解释:1 3 4 8/1 3 5 8 长度为四 这让我想到了hdu上导弹拦截那道题,是求最长上升子序列长度 其转移方程为: dp[i]=max(dp[i],dp[j]+1); 如果a[j]<a[i],那么dp[i] 阅读全文
posted @ 2020-02-02 18:11 remarkableboy 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 最大连续和:给出一段序列,选出其中连续且非空的一段使得这段和最大。 stdin: 7 2 -4 3 -1 2 -4 3 stdout: 4 状态转移方程:dp[i]=max(dp[i-1]+a[i],a[i]) 如果dp(i-1)已经为负数,那么前i-1段就没有意义了,我们直接从a[i]重新开始取。 阅读全文
posted @ 2020-02-01 17:56 remarkableboy 阅读(332) 评论(0) 推荐(0) 编辑