ACM学习
简^O^帅
这个作者很懒,什么都没留下…
展开
-
ACM第2次STL(set和map)
一、set和multiset1.区别:set容器中不允许元素重复,multiset可以允许重复2.操作:头文件#includeset<数据类型>s;s.size() – 返回容器内元素个数。s.empty() – 容器为空。s.count(a) – 返回元素值为a的元素的个数。s.lower_bound(a) – 返回元素值大于等于a的第一个元素位置。s.upper_...原创 2019-03-13 23:42:24 · 108 阅读 · 0 评论 -
acm第十六次单调队列
单调队列一、单调队列:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作二、单调队列的常用操作如下:①插入:若新元素从队尾插入后会破坏单调性,则删除原来的队尾元素,直到插入后不再破坏单调性为止,再将其插入单调队列。②获取最优值:访问首尾元素。三、整理归纳单调队列的一般解题步骤:1、维护区间最值;2、...原创 2019-05-01 21:58:22 · 199 阅读 · 0 评论 -
acm第十五次新二分法
一、二分查找算法①简单定义:在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。②时间复杂度:O (logn),优于直接顺序查找O(n)③基本思想:二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x...原创 2019-04-27 23:02:42 · 103 阅读 · 0 评论 -
acm第十七次被遗忘的三分
最近的做的题都是二分,以为自己看懂了PPT就会了,结果a题给了一个下马威,没办法的我,求助了百度,研究半天也算一知半解,有了思路,后续又做了几个题。又到写博客的时候了,写写三分法吧。一、三分法定义当需要求某凸性或凹形函数的极值,通过函数本身表达式并不容易求解时,就可以用三分法不断逼近求解。二、三分法思想与二分法类似的是,三分法也先取下界(记作l)和上界(记作r)的中间值(记作midl)...原创 2019-05-04 23:10:52 · 130 阅读 · 0 评论 -
acm第十四次补充新学的知识和打代码的bug
老师大部分再讲搜索,已经写完2次的我不想在写了,emm…二分还没怎么看,所以先不写了,就说说老师上课讲的逻辑移位和按位运算吧,哦,还有写代码时自己遇到的bug。一、运行成功后乱码原因1、有变量没赋值 ,并且应用到了2、 在关键位置写错字母、数字、变量名。二、.逻辑移位操作对象: 二进制无符号数,例如像地址。(1)逻辑右移特点:高位补0,低位移出。符号:>>例:x>...原创 2019-04-24 23:04:20 · 97 阅读 · 0 评论 -
acm第十八次数据结构
其实这数据结构不是新的内容,里边的栈和队列我们在stl中也都了解过了,但是我们是根据函数库直接调用,而这次讲的数据结构,是具体的代码实现。 例如: 一:栈 一般的栈操作我们在stl中直接用push入栈,pop出站 而这次老师讲的多用具体的代码 #define n 100入栈操作void push(int s[],int *top,int *x)...原创 2019-05-08 23:08:06 · 119 阅读 · 0 评论 -
acm第二十一次堆
一、堆的定义堆结构是一种数组对象,它可以被视为一棵完全二叉树。树中每个结点与数组中存放该结点中值的那个元素相对应二、堆的性质设数组A的长度为len,二叉树的结点个数为size,size≤len,则A[i]存储二叉树中编号为i的结点值(1≤i≤size),而A[size]以后的元素并不属于相应的堆,树的根为A[1],并且利用完全二叉树的性质,我们很容易求第i个结点的父结点(parent(i))...原创 2019-05-18 22:51:38 · 100 阅读 · 0 评论 -
acm第二十次二叉树
一、 二叉树定义二叉树是一种特殊的树型结构,它的度数为2的树。即二叉树的每个结点最多有两个子结点。每个结点的子结点分别称为左孩子、右孩子,它的两棵子树分别称为左子树、右子树。二、二叉树有5中基本形态:①空二叉树②仅有根节点的二叉树③右子树为空的二叉树④左右子树均非空的二叉树⑤左子树为空的二叉树三、二叉树术语前面引入的树的术语也基本适用于二叉树,但二叉树与树也有很多不同,如:首先二叉树的每...原创 2019-05-15 22:40:17 · 439 阅读 · 0 评论 -
acm第十九次树
一、树及二叉树1、树的概念----树的定义一棵树是由n(n>0)个元素组成的有限集合,其中:①每个元素称为结点(node);②有一个特定的结点,称为根结点或树根(root);③除根结点外,其余结点能分成m(m>=0)个互不相交的有限集合T0,T1,T2,……Tm-1。其中的每个子集又都是一棵树,这些集合称为这棵树的子树。2...原创 2019-05-11 23:01:06 · 99 阅读 · 0 评论 -
acm第二十三次图的遍历
一、深度优先与广度优先遍历 从图中某一顶点出发系统地访问图中所有顶点,使每个顶点恰好被访问一次,这种运算操作被称为图的遍历。为了避免重复访问某个顶点,可以设一个标志数组visited[i],未访问时值为false,访问一次后就改为true。 图的遍历分为深度优先遍历和广度优先遍历两种方法,两者的时间效率都是O(n*n)。1.深度优先遍历 深度优先遍历与深搜DFS相似,从一个点A出发,...原创 2019-05-25 22:47:40 · 202 阅读 · 0 评论 -
acm第二十二次图论算法基本概念
基本:一、什么是图? 很简单,点用边连起来就叫做图,严格意义上讲,图是一种数据结构,定义为:graph=(V,E)。V是一个非空有限集合,代表顶点(结点),E代表边的集合。二、图的一些定义(a)有向图:图的边有方向,只能按箭头方向从一点到另一点。((b)无向图:图的边没有方向,可以双向。三、图的一些基本概念结点的度:无向图中与结点相连的边的数目,称为结点的度。结点的入度:在有向图...原创 2019-05-22 23:32:52 · 123 阅读 · 0 评论 -
acm第十二次深入了解递归和初识搜索
一、深入了解递归我在看例题时,每当看到一个递归实现, 总是难免陷入不停的验证之中,比如阶乘,求解Factorial(n)时,我总会情不自禁的发问,Factorial(n-1)可以求出正确的答案么?接着就会再用Factorial(n-2)去验证,,,不停地往下验证直到Factorial(0)。感觉很傻…但是我对递归的思路有点不适应,感觉和我们平时习惯的思维方式相反。我们习惯的思维是:已知Fact...原创 2019-04-17 23:13:25 · 116 阅读 · 0 评论 -
acm第十一次递归函数
也没什么好写的,就简写递归函数一、递归1、递归算法:程序直接或间接调用自身的编程技巧称为递归算法。2、递归函数:直接或间接调用自身的函数称为递归函数3、简述:它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。二、递归的基本思想1、分解问题:把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的小问题,然后最小问题可以直接解决。...原创 2019-04-13 23:16:48 · 179 阅读 · 0 评论 -
acm第一次STL(讲述队列与优先队列)
一、队列(queue)1.含义:是一种从顶端取出元素,从尾端加入元素的一种新的数据结构2.头文件: #include 定义:queue <数据类型> 变量名;如:queue q;操作:empty() – 返回bool型,表示queue为空 (q.empty() )size() – 返回queue内元素个数 (q.size() )front() – 返回queue内的...原创 2019-03-06 20:41:17 · 180 阅读 · 0 评论 -
acm第3次STL(vector)
一、vector1、定义:动态数组,动态改变储存空间的大小,定义的数组可以没有界限2、应用:头文件#include定义:vector <数据结构> 变量名;如:vector v;操作:empty() – 表示vector是为空 (v.empty() )size() – 返回vector内元素个数 (v.size() )push_back(a) 将元素a插入最尾端(v...原创 2019-03-16 22:55:52 · 108 阅读 · 0 评论 -
acm第四次贪心算法
贪心的题比stl感觉简单多了,但是自己在做题时,还是缺乏贪心的思路,总是超时,唉,acmer之路长慢慢~一:贪心算法1、贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,希望得到结果是最好或最优的算法。2、贪心算法是一种能够得到某种度量意义下的最优解的分级处理方法,通过一系列的选择得到一个问题的解,而它所做的每一次选择都是当前状态下某种意义的最好选择。即希望通过问题的局部最优解...原创 2019-03-20 22:23:07 · 90 阅读 · 0 评论 -
acm第八次背包问题
一、01背包: 有N件物品和一个容量为V的背包。(每种物品均只有一件)第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 for i=1..N for v=v....0 f[v]=max{f[v],f[v-c[i]]+w[i]};二、完全背包: 有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求...原创 2019-04-03 22:44:49 · 124 阅读 · 0 评论 -
acm第七次dp通俗解法
通过这几天的做题,我发现dp的理论很简单就是大问题化小问题,求子问题,利用递推公式等求解。但是理论真的只是理论,真正实践起来才知道dp没有那么简单。 我知道要求解他的子问题,但是如何求解,自己却无从下手,知道要求递归公式,但却写不出来。所以我通过做题,来锻炼自己的分析能力,把问题逐步解析,一步一步的来求解,最终得到了递归公式,也AC了几个题。 总结一下就是:1、将原问题分解为...原创 2019-03-30 23:10:24 · 155 阅读 · 0 评论 -
acm第五次之贪心做题之后总结
通过做题,了解到自己还是不熟悉贪心的解题思路,有的时候会做题,有方法,但是不是贪心思路,就会超时,所以我专门找了一些如何才能按照贪心思路的方法做题。 所谓贪心,就是每一步每一个途径,都求最优解,一步一步的来实现,其实就是符合了贪心思想。而如果我们只是简单粗暴的做题,用最直白的做题,就会超时。那么怎么才能发现贪心思路呢?我们其实可以通过逆向思维,通过结果来发现规律,由结果倒推性质,从而就有可...原创 2019-03-23 22:50:57 · 131 阅读 · 0 评论 -
acm第六次动态规划
一、动态规划1、 只要问题可以划分成规模更小的子问题,并且原问题的最优解中包含了子问题的最优解,则可以考虑用动态规划解决。因此,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法。该方法主要应用于最优化问题,这类问题会有多种可能的解,每个解都有一个值,而动态规划找出其中最优(最大或最小)值的解。若存在若干个取最优值的解的话,它只取其...原创 2019-03-27 23:21:31 · 101 阅读 · 0 评论 -
acm第九次区间dp+多重背包做题总结
一、区间dp1、所谓 区间DP主要是把一个大区间拆分成几个小区间,先求小区间的最优值,然后合并起来求大区间的最优值。2、基本分析步骤:①描述状态。②状态转移方程。③递推边界。3、一般代码实现//mst(dp,0) 初始化DP数组for(int i=1;i<=n;i++){dp[i][i]=初始值}for(int len=2;len<=n;len++) //区间...原创 2019-04-06 18:32:47 · 150 阅读 · 0 评论 -
acm第10次区间dp+做题新知识
最近好像也没有什么好写的,区间dp上次写了点,周一的时候老师又讲了,所以在此补充点新的理解吧,然后最后附上做题是自己不知道的新知识一、区间dp1、基础代码①、当求最小dp时//一般区间DP实现代码memset(dp, 0x3f, sizeof(dp));//初始化dp//0x3f在此表示一个很大很大的值for (int i = 1; i <= n; i++) //区间长度为1...原创 2019-04-10 23:07:25 · 139 阅读 · 0 评论 -
acm第十三次再说搜索
一、搜索分为广度和深度现在说说他们的模板代码①广度搜索可用队列来写,先进先出具体过程:1 每次取出队列首元素(初始状态),进行拓展2 然后把拓展所得到的可行状态都放到队列里面3 将初始状态删除4 一直进行以上三步直到队列为空。代码模板:While Not Queue.Empty ()Begin可加结束条件Tmp = Queue.Top ()从Tmp循环拓展下一个状态Nex...原创 2019-04-20 23:00:26 · 77 阅读 · 0 评论 -
ACM课程报告
一、对课程的认识和自我感受原创 2019-06-04 10:15:05 · 192 阅读 · 0 评论