---------数据结构---------
文章平均质量分 88
雪山上的小草
每天都是初学者
展开
-
二分查找
二分查找法的实现和应用汇总 在学习算法的过程中,我们除了要了解某个算法的基本原理、实现方式,更重要的一个环节是利用big-O理论来分析算法的复杂度。在时间复杂度和空间复杂度之间,我们又会更注重时间复杂度。时间复杂度按优劣排差不多集中在:O(1), O(log n), O(n), O(n log n), O(n2), O(nk), O(2n)到目前位置,似乎我学到的算原创 2017-10-17 17:54:24 · 136 阅读 · 0 评论 -
二叉树遍历序列生成二叉树
中序,前序确定二叉树/*71 2 3 4 5 6 74 1 3 2 6 5 7*/int build1(int la,int ra,int lb,int rb)//以中序,先序推树{ if(la>ra)return 0; int root=b[lb]; int p1,p2; p1=la; while(a[p1]!=root){//找到父节点...原创 2018-03-29 12:03:56 · 461 阅读 · 0 评论 -
二分查找各种姿势
最原始的二分查找:查找等于key的元素下标/** * 二分查找,找到该值在数组中的下标,否则为-1 */static int binarySerach(int[] array, int key) { int left = 0; int right = array.length - 1; // 这里必须是 <= while (left <= rig...转载 2018-03-23 17:54:54 · 157 阅读 · 0 评论 -
并查集L2-010. 排座位
L2-010. 排座位时间限制150 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。输入格式:输入第一行给出3个正整数:N(<= 100),即前来参宴的宾客总人数,则这些...原创 2018-03-22 16:55:54 · 161 阅读 · 0 评论 -
天梯赛训练集L2-001. 紧急救援---最短路
题目链接L2-001. 紧急救援时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路...原创 2018-03-21 12:00:58 · 330 阅读 · 0 评论 -
数位dp总结 之 从入门到模板
基础篇数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位......数的每一位就是数位啦!之所以要引入数位的概念完全就是为了dp。数位dp的实质就是换一种暴力枚举的方式,使得新的枚举方式满足dp的性质,然后记忆化就可以了。两种不同的枚举:对于一个求...转载 2018-03-19 21:13:31 · 170 阅读 · 0 评论 -
hdu2844多重背包
题意:有n个硬币A[i]表示第i个硬币的价值,C[i]表示第i个硬币的数量求有多少种组合情况的值在1~m之中多重背包解决:定义dp[i]为把能装下i价值的抽屉在硬币的组合情况下能装下的最大的价值显然dp[i]<=i,所以当dp[i]==i时就代表有一种硬币组合情况代码实现:#include<iostream>#include<cstdio>#include<...原创 2018-03-18 15:50:29 · 168 阅读 · 0 评论 -
dd大牛的背包九讲-背包问题汇总
背包九讲目录 第一讲 01背包问题 第二讲 完全背包问题 第三讲 多重背包问题 第四讲 混合三种背包问题 第五讲 二维费用的背包问题 第六讲 分组的背包问题 第七讲 有依赖的背包问题 第八讲 泛化物品 第九讲 背包问题问法的变化 附:USACO中的背包问题 前言本篇文章是我(dd_engi)正在进行中的一个雄心勃勃的写作计划的一部分,这个计划的内容是写作一份较为完善的NOIP难度的动态规划总结,名...转载 2018-03-18 11:15:55 · 225 阅读 · 0 评论 -
RMQ倍增求求区间最值
RMQ算法全称为(Range Minimum/Maximum Query)意思是给你一个长度为n的数组A,求出给定区间的最值的下标。当然我们可以采用枚举,但是我们也可以使用线段树来优化,复杂度为(nlogn),但是最好的办法是采用Sparse_Table算法,简称ST算法。他能在进行(nlogn)的预处理后达到n(1)的效率。下面来分析下最大值和最小值,都要用到DP的思想。最小值(Mininun)...原创 2018-03-14 10:45:14 · 680 阅读 · 0 评论 -
从头到尾彻底理解KMP
转载于http://blog.csdn.net/v_JULY_v/article/details/70418271. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文。 然近期因开了个算法班,班上专门讲解数据结构、面试、算法,才再次仔细回顾了这...转载 2018-03-07 14:51:51 · 147 阅读 · 0 评论 -
树状数组彻底入门
转载于https://www.cnblogs.com/hsd-/p/6139376.htmlint lowbit(int t){return t&(-t);}void add(int x,int y){for(int i=x;i<=n;i+=lowbit(i))tree[i]+=y;}int getsum(int x){int ans=0;for(int i=...转载 2018-03-05 18:07:34 · 247 阅读 · 0 评论 -
poj2299离散化加树状数组求逆序数
poj2299题目链接题意:给出n个数,求将这n个数从小到大排序,求使用快排的需要交换的次数。分析:由快排的性质很容易发现,只需要求每个数的逆序数累加起来就行了。逆序数可以用树状数组求。 n<500000,0<=a[i]<=999,999,999, 下面是树状数组的一张图如果n=8有8个数,树状数组中的A[1~8]很明显数组不可能开这么大,所以需要...原创 2018-03-05 18:00:56 · 159 阅读 · 0 评论 -
poj3140
题目连接题意: 给n个节点的带权树,删掉其中一边,就会变成两颗子树, 求删去某条边使得这这两颗子树的权值之差的绝对值最小。思路:dfs一遍,用ens[i]表示i的子树的权值和删去edge(to,fa),fa是to的父节点,to的子树权值和为ens[to],那么另外的权值和为sum-ens[to]答案ans=sum-ens[to]-ens[to]因为用dfs递推的缘故直原创 2017-10-24 21:24:06 · 286 阅读 · 0 评论 -
poj1741树的分治
给你一棵TREE,以及这棵树上边的距离。问有多少对点它们两者间的距离小于等于K。我们知道一条路径要么过根结点,要么在一棵子树中,这启发了我们可以使用分治算法。只要先求出经过根结点的路径数,再递归的求经过所有子结点的路径数即可。下面来分析如何处理路径过根结点的情况。 我们先用一次搜索求出根的所有子结点到根的距离并将其放入一个数组中,复杂度O(n)。将这转载 2017-10-24 19:30:12 · 164 阅读 · 0 评论 -
最长上升非降子序列的长度动态规划
第一种dp从后往前:dp[i]表示以a[i]为起点的最长上升非降子序列的长度a[8]={10,2,2,4,12,23,34,2}dp[8]={4,6,5,4,3,2,1,1};代码实现: #include<bits/stdc++.h> using namespace std; void logest_increase_sub(const int*a,int s...原创 2017-10-17 17:57:33 · 163 阅读 · 0 评论 -
C - Alyona and SpreadsheetDP
题目链接题意在一个矩阵中,询问l~r行是否有一列满足mp[i][j]>=mp[i-1][j](i属于l~r)即非递减序列,是输出Yes,否输出No用vector >储存矩阵mpdp[i][j]表示在j列从i行往上推dp[i][j]行满足非递减,即在j列行i-dp[i][j]到行i满足非递减序列,同样用vector >储存mx[i]表示在所有列中i-mx[i]最小的,即在所有列中在满原创 2017-10-17 17:58:09 · 190 阅读 · 0 评论 -
Super Jumping! Jumping! Jumping!杭电1087
DescriptionProblem DescriptionNowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. Maybe you are a good boy, and know little about this game, so I int原创 2017-10-17 17:59:00 · 194 阅读 · 0 评论 -
hdu2159二维费用背包
题目连接背包九讲----二维费用背包问题二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。算法费原创 2017-10-17 18:00:00 · 153 阅读 · 0 评论 -
ACboy needs your help hdu 分组背包问题
DescriptionACboy has N courses this term, and he plans to spend at most M days on study.Of course,the profit he will gain from different course depending on the days he spend on it.How to arrange原创 2017-10-17 18:00:38 · 303 阅读 · 0 评论 -
bone collector hdu 01背包问题
Problem DescriptionMany years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave原创 2017-10-17 18:01:18 · 286 阅读 · 0 评论 -
hdu1520树形dp入门
题目链接题意:要开派对,邀请了上司就不能邀请他的下属,邀请了下属就不能邀请他的上司,每个人有一个值,求邀请的人的总值最大第一行给出一个数n,代表有n个人。下面n行分别给出n个人的的值再下面n行每行给出L,K;K是L的上司以0 0结束一组输入树形dp:把每个人看成一个点,则该点有两个状态:邀请或没被邀请定义f[u][0]为节点没被邀请时的值;f[u][1]为节点被邀请时的原创 2017-10-17 18:02:07 · 200 阅读 · 0 评论 -
hdu1556Color the ball线段树区间更新
题目链接线段树区间更新更新一段区间,在更新区间的过程中,区间被分成几段,每一段的左右界限刚好是一个节点的tree[node].left和tree[node].right(如果不是继续分,直到是为止)区间几次更新后,进行查询,查询的过程就可以看成重走了更新的过程,所以第一种代码中ans+=A[k].count;ans就是最后答案 1 #include"stdio.h" 2 #i原创 2017-10-17 18:02:47 · 221 阅读 · 0 评论 -
DFS&BFS
1.深度优先遍历基本思想:从图中某顶点V0出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点;重复上述过程,直至图中所有顶点都被访问到为止。分析:在遍历图时,对图中每个顶点至多调用一次DFS函数,因为一旦某个顶点被标志成已被访问,就不再从它出发进行搜索。...原创 2017-10-17 18:07:50 · 367 阅读 · 0 评论 -
树链剖分详解+模板
树链剖分是解决在树上进行插点问线,插线问点等一系列树上的问题假如现在给你一棵树,然后没两条边之间有一条权值,有一些操作,1:x---y之间的最大权值是多少,2:改变x---y之间的权值当前这样的操作有很多,如果直接用暴力的方法的话肯定不行,那么就要想一个好的方法,我们可以想一下能不能借助线段树解决,能不能想一种方法对树上的边进行编号,然后就变成区间了。那么我们就可以在线段树上进原创 2017-11-06 21:03:02 · 175 阅读 · 0 评论 -
最小生成树(Kruskal和Prim算法)
关于图的几个概念定义:连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图。强连通图:在有向图中,若任意两个顶点vi与vj都有路径相通,则称该有向图为强连通图。连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵...转载 2018-02-28 20:39:48 · 155 阅读 · 0 评论