随笔分类 - 数据结构
摘要:恢复内容开始 2017-08-10 20:00:45 writer:pprp 拆分数: 把正整数n拆分成k个正整数之和的方案数; 问题转换:将1转化为2 1、把n表示成m个正整数之和的方案数 2、把n表示成不超过m的正整数之和的方案数 两者答案相同:解释Ferrers图 用dp来做,dp[i][j]
阅读全文
摘要:2017-08-02 23:12:52 writer:pprp 题目大意:给你n个数,从n个数中选取几个数,使平均数和中位数的差值最大,将选取的个数还有选取的数字找出; 算法分析:先枚举,再三分 枚举中位数,可以证明中位数一定是一个,而不是两个组成的。 三分主要用于类似于二次函数的曲线中,有极大或者
阅读全文
摘要:2017-08-02 14:27:18 writer:pprp 题意: • 每块木板宽度均为1,高度为h[i] • n块木板连接为宽度为n的栅栏 • 每次可以刷一横或一竖(上色) • 最少刷多少次可以使得栅栏被全部上色 • 1 ≤ n ≤ 5000 算法分析:可以横着刷,可以竖着刷,横着刷是为了减小
阅读全文
摘要:2017-08-01 21:49:34 writer:pprp 集训第一天 题意如下: • Codeforces 797C Minimal string• 给定长度为n的小写字母字符串s,及空串t, u,两种操作• 1. 将s的第一个字符加到t的末尾• 2. 将t的最后一个字符加到u的末尾• 求字典
阅读全文
摘要:2017-08-01 21:45:19 writer:pprp 题目: • POJ 3977• 给定n个数,求一个子集(非空)• 使得子集内元素和的绝对值最小• n ≤ 35 AC代码如下:(难点:枚举出sum)
阅读全文
摘要:2017-08-01 21:35:53 writer:pprp 集训第一天:作为第一道题来讲,说了两种算法, 第一种是跟二进制数联系起来进行分析; 第二种是用深度搜索来做,虽然接触过深度搜索但是这种题型还是我第一次见; 题目: 统计1~n之间有多少数字只由0,1构成 1 ≤ n ≤ 1e9 用深度搜
阅读全文
摘要:2017-08-01 21:29:14 writer:pprp 参考:http://blog.csdn.net/piaocoder/article/details/45584763 算法分析:直接暴力复杂度过高,所以要用二分的方法,分成两半复杂度就会大大降低; 题目意思:给定4个n(1<=n<=40
阅读全文
摘要:2017-07-29 16:41:00 writer:pprp 线段树跟区间操作相关,想要在题目限定的时间内解决问题就需要用线段树这种数据结构来解决; 线段树是一种二叉平衡树 参考书目:张新华的《算法竞赛宝典》 题目:敌兵布阵 Problem Description C国的死对头A国这段时间正在进行
阅读全文
摘要:2017-07-28 17:27:41 writer:pprp 有两种优化方法: 题目:亲戚 代码如下:
阅读全文
摘要:2017-07-28 16:12:51 writer:pprp 题目简单描述: 第一行,N代表单词库中有N个单词,随后是N行单词,紧接着M代表待查单词数目,随后是M行待查单词 输出:拼写单词错误的单词数目 算法:用到了哈希表进行快速查找 代码如下:
阅读全文
摘要:2017-07-28 16:01:16 writer:pprp 哈希表:通过节点储存位置和其关键字建立某种直接关系,使得查找的时候无需作比较或者做很少次数的比较就能找到相应的记录; 哈希函数的几种构造方法: 自己制定规则的哈希表 代码如下:
阅读全文
摘要:2017-07-28 09:04:44 writer:pprp 前向星是一种星形表和司法,把所有的边集中在一起,形成一个边列表,比如第i条边(u,v) = w应当分别把起点、终点、权值存在三个数组中,但是下表相同 前向星是按照起始节点从小到大排序,除了你能直接用起点终点定位以外,前向星几乎是完美的。
阅读全文
摘要:2017-07-27 22:37:32 writer:pprp 题目如下: 代码如下:
阅读全文
摘要:2017-07-27 22:21:04 writer:pprp 该算法的本质是动态规划,形式简单,复杂度高为O(n^3); d[i][j] = max(d[i][k]+d[k][j],d[i][j]); 采用的基本手段是松弛 适用:解决多源最短路径问题 代码如下:
阅读全文
摘要:2017-07-27 22:18:11 writer:pprp SPFA算法实质与Bellman-Ford算法的实质一样,每次都要去更新最短路径的估计值。 优化:只有那些在前一遍松弛中改变了距离点的值的点,才可能引起他们邻接点的距离估计值的改变; 做法:使用队列来缩小搜索范围的; 首先要将个点距离估
阅读全文
摘要:2017-07-27 16:02:48 writer:pprp 在BEllman-Ford算法中,其最外层的循环的迭代次数为n-1,如果不存在负权回路,需要迭代的次数是远远小于n-1; 如果在某一次迭代中,松弛操作没有被执行,则说明这次迭代所有的边都没有被松弛,表示任意两点之间在之后的迭代中没有可能
阅读全文
摘要:2017-07-27 08:58:08 writer:pprp 参考书目:张新华的《算法竞赛宝典》 Bellman-Ford算法是求有向图单源最短路径的,dijkstra算法的条件是图中任意一条边的权都是正的;BF算法可以解决存在负边权的图; 算法流程分为三个部分: 例题:虫洞 代码如下:
阅读全文
摘要:2017-07-26 22:30:45 writer:pprp dijkstra算法法则:设置顶点集合S,首先将起始点加入该集合,然后根据起始点到其他顶点的路径长度, 选择路径长度最小的顶点加入到集合S,根据所加入顶点更新源点到其他顶点的路径长度,然后再选取最小边的顶点; 实现:用邻接矩阵 适用条件
阅读全文
摘要:2017-07-26 14:35:49 Prims算法,是一种基于“贪心”的求最小树的算法 ,以每次加入一个邻接边来建立最小树,直到找到N-1个边为止。 规则:以开始时生成树的集合为起始的顶点,然后找出与生成树集合邻接的边中,加权值最小的边来生成树, 为了确定新加入的边不会造成回路,所以每一个新加入
阅读全文
摘要:2017-07-26 10:32:07 writer:pprp Kruskal算法是根据边的加权值以递增的方式,一次找出加权值最低的边来建最小生成树;并且每次添加的边不能造成生成树有回路,直到找到N-1个边为止; 适用范围:边集比较少的时候,可以考虑用这个方法; 做法:将图形中所有的边的权值,递增排
阅读全文

浙公网安备 33010602011771号