ACM基础知识
文章平均质量分 91
herbertpotter
这个作者很懒,什么都没留下…
展开
-
手动扩大内存
还在因为 怕 g++ 提交时间很慢,但是用C++ 交又怕栈溢出???我们都知道,如果代码里有 递归函数 频繁调用, 用 C++ 提交代码, 很可能就会 出现 Runtime Error (ACCESS_VIOLATION) 但是用G++提交,如果数据量很多的话,又会出现 Time Limit Exceeded那怎么办呢???呵呵,G转载 2017-08-07 16:59:51 · 298 阅读 · 0 评论 -
贪心,递归,动态规划,及分治算法之间的区别和联系(二)
一般实际生活中我们遇到的算法分为四类: 一>判定性问题 二>最优化问题 三>构造性问题 四>计算性问题而今天所要总结的算法就是着重解决 最优化问题 《算法之道》对三种算法进行了归纳总结,如下表所示: 标准分治动态规划贪心算法适用类型通用问题转载 2017-08-05 20:14:35 · 755 阅读 · 0 评论 -
贪心,递归,动态规划,及分治算法之间的区别和联系(三)
【算法导论】贪心算法,递归算法,动态规划算法总结一般实际生活中我们遇到的算法分为四类:一>判定性问题二>最优化问题三>构造性问题四>计算性问题而今天所要总结的算法就是着重解决 最优化问题《算法之道》对三种算法进行了归纳总结,如下表所示:标准分治动态规划贪心算法转载 2017-08-05 20:17:53 · 2021 阅读 · 0 评论 -
贪心,递归,动态规划,及分治算法之间的区别和联系(四)
在很多算法书中都是把贪婪选择即贪心算法排在第一个讲述,继而再讨论分治策略和动态规划。其实,分治策略才是最基础的,动态规划、贪婪选择可以说是建立在其基础上的(算法导论中就按照分治策略、动态规划、贪婪选择的顺序来讲的)。那分之策略、动态规划、贪婪选择以及递归之间到底有啥联系与区别呢?1、分治策略(Divide and Conquer) 将原问题分解为若干个规模较小但类似于原问题的子问题(Divide)转载 2017-08-05 20:20:12 · 2466 阅读 · 0 评论 -
排列组合(二)
[cpp] view plain copyprint?1.dfs回溯法输出组合 1.dfs回溯法输出组合[cpp] view plain copyprint?#include #include #include #include using namespace std; int visit[10转载 2017-08-21 17:07:42 · 216 阅读 · 0 评论 -
排列组合(三)
1 . 无重复元素的全排列当然stl有next_permutation()函数,用起来更方便[cpp] view plain copyprint?#include #include using namespace std; int n,a[100],count; void permutation(int k){ if(k==n){转载 2017-08-21 17:11:29 · 180 阅读 · 0 评论 -
排列组合(四)
转自:http://wuchong.me/blog/2014/07/28/permutation-and-combination-realize/全排列和全组合实现记得@老赵之前在微博上吐槽说,“有的人真是毫无长进,六年前某同事不会写程序输出全排列,昨天发邮件还是问我该怎么写,这时间浪费到我都看不下去了。” 那时候就很好奇全排列到底是什么东西,到底有多难?今天复习的转载 2017-08-21 17:13:58 · 182 阅读 · 0 评论 -
BFS/DFS 模板 代码
[cpp] view plain copyprint?#include #include #include #include using namespace std; const int maxn=100; bool vst[maxn][maxn]; // 访问标记 int dir[4][2]={0,1,0,-1,1,0,-1,0}; // 方向向量转载 2017-08-21 20:07:05 · 798 阅读 · 0 评论 -
HDU 1728 逃离迷宫 + HDU 1072 Nightmare
KIDx 的解题报告HDU 1728 逃离迷宫 http://acm.hdu.edu.cn/showproblem.php?pid=1728对于代码31行,为什么等于不能随便剪掉如果剪掉就会出现下图结果:【假如转弯数k=1,起点终点如图】那么如果你的代码是优先向右搜索就会出错红色的线是先搜的,由于最多转一次弯,所以不合题意;蓝色是后搜的,因为遇到转弯数相等所以不往下转载 2017-08-21 20:21:31 · 216 阅读 · 0 评论 -
Trie树(字典树)
1. Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有3个基本性质:转载 2017-08-21 20:27:35 · 316 阅读 · 0 评论 -
母函数模板
版权所有。所有权利保留。欢迎转载,转载时请注明出处:http://blog.csdn.net/xiaofei_it/article/details/17042651母函数,又称生成函数,是ACM竞赛中经常使用的一种解题算法,常用来解决组合方面的题目。本文讲解母函数,但不讲解该算法的基础理论。读者随便找一本组合数学教材便可找到相应的内容,或者直接在网上搜索转载 2017-08-15 14:31:03 · 204 阅读 · 0 评论 -
线段树模板(刘汝佳版本)
一、线段树(点修改)Update(x,v): 把Ax修改为vQuery(L,R): 计算区间[qL,qR] 最小值。代码:[cpp] view plain copyprint?// Dynamic RMQ // Rujia Liu // 输入格式: // n m 数组范围是a[1]~a[n],初始化为0。操作有m个转载 2017-08-15 15:13:46 · 2115 阅读 · 1 评论 -
线段树基础大入门
线段树的入门级 总结 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。 使用线段树可以转载 2017-08-15 15:16:13 · 191 阅读 · 0 评论 -
贪心,递归,动态规划,及分治算法之间的区别和联系
本人原创,转载请注明出处:http://blog.csdn.net/tyhj_sf/article/details/53969072引言最近集中研究计算智能,其中涉及到递归和动态规划,动态规划实现中又用到了递归,忽然发现这两个概念的差别分得不太清楚。索性把递归、分治策略、动态规划、贪婪选择之间的联系与区别都一并搞清楚吧。1、分治策略(Divide and Conquer)将原问题分转载 2017-08-05 20:11:50 · 957 阅读 · 0 评论 -
【算法小总结】广度优先搜索剖析
广度优先搜索以前一直用搜索用的都是深搜,因为听说有很多题能用广搜就能用深搜什么的。今天老老实实的去看广搜了,结果发现我之前想的太天真的,DFS和BFS不仅在性质上不同,而且对于某些题和某些情况,用BFS比DFS要快(不是绝对)。 今天好好说道说道这个BFS(广度优先搜索) 很多问题(如过迷宫问题),每走下一步,都要考虑很多种情况,这个时候,就要每一步每一步的去试探,去找到合适的转载 2017-08-20 13:55:11 · 388 阅读 · 0 评论 -
递归,回溯,DFS,BFS的理解和模板
LeetCode 里面很大一部分题目都是属于这个范围,例如Path Sum用的就是递归+DFS,Path Sum2用的是递归+DFS+回溯这里参考了一些网上写得很不错的文章,总结一下理解与模板递归:就是出现这种情况的代码: (或者说是用到了栈)解答树角度:在dfs遍历一棵解答树 优点:结构简洁缺点:效率低,可能栈溢出递归转载 2017-08-02 03:19:55 · 500 阅读 · 0 评论 -
空间换时间,把递归的时间复杂度降低到O(2n)
递归算法的时间复杂度除非只有前两项,否则都不是线性的,并且相当耗费内存。我们用最常见的的fibonacci数列来说明:function fibonacci(n){ if( n === 0 || n === 1){ return n; } else { return fibonacci(n - 1) + fibonacci(n - 2);转载 2017-08-09 17:42:56 · 928 阅读 · 0 评论 -
【背包专题】01背包
暑假集训开始了,按照队里的分配,我是弄DP的,嘛,于是我又一次的开始了从01背包开始学习,昨天将杭电的几道01背包重新做了一遍,下面讲讲我自己对于01背包的理解。 首先01背包题目的雏形是有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。从这个题目中可以看出,01背包的特点就是:每种物品仅有一件,可以选择放或不放。转载 2017-08-16 20:38:35 · 242 阅读 · 0 评论 -
数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树
BST树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: BST树的搜索,从根结点开始,如果查询的关键转载 2017-08-03 19:41:33 · 294 阅读 · 0 评论 -
菜鸟都能理解的线段树入门经典
线段树的定义首先,线段树既是线段也是树,并且是一棵二叉树,每个结点是一条线段,每条线段的左右儿子线段分别是该线段的左半和右半区间,递归定义之后就是一棵线段树,图示如下图1.线段树示意图定义线段树的数据结构struct Line{ int left, right, count; Line *leftChild, *rightChild;转载 2017-08-18 15:25:07 · 588 阅读 · 0 评论 -
分割问题
(1) n条直线最多分平面问题 题目大致如:n条直线,最多可以把平面分为多少个区域。 析:可能你以前就见过这题目,这充其量是一道初中的思考题。但一个类型的题目还是从简单的入手,才容易发现规律。当有n-1条直线时,平面最多被分成了f(n-1)个区域。则第n条直线要是切成的区域数最多,就必须与每条直线相交且不能有同一交点。这样就会得到n-1个交点。这些交点将转载 2017-08-18 16:19:47 · 147 阅读 · 0 评论 -
卡特兰数的应用
卡特兰递推公式1. 2. 3. 4. 5. 卡特兰数的应用1. 由n个+1和n个-1构成2n项其部分和满足的序列个数等于第n个Catalan数。假设不满足条件的序列个数为,那么就有。而对于不满足的序列,必然存在某一个奇数位使,而且+1的个数恰好比-1的个数少一个,此时我们将前k项中的+1变为-1,将-1变为+1,那么就得到一个有(n+1)个+1和转载 2017-08-18 20:17:42 · 385 阅读 · 0 评论 -
卡特兰数的应用(二)
Catalan数——卡特兰数 今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来后来查了下,原来是Catalan数。悲剧啊,现在整理一下一、Catalan数的定义令h(1)=1,Catalan数满足递归式:h(n) = h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1),n>=2该递推关系的解为:h(n) = C(2n转载 2017-08-18 20:31:25 · 172 阅读 · 0 评论 -
很特别的一个动态规划入门教程
很特别的一个动态规划入门教程今天在网上看到一个讲动态规划的文章,是以01背包为例的,这文章和书上的讲解非常不一样,令我眼前一亮,于是转载一下下~~~(说明一下,本人非常痛恨教材公式定理漫天飞,实际的讲解却讲得非常枯涩难懂,这种中国式的教育已经延绵了几千年了,现在中国的教材还是这个样子,讲清楚些明白些就那么难么?高中有个老师讲的一句话一直觉得很有道理:“教得会天才不是真本事,能把转载 2017-08-11 19:47:35 · 137 阅读 · 0 评论 -
卡特兰数总结
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1023题目大意:给你一个数n,表示有n辆火车,编号从1到n,从远方驶过来,问你有多少种出站的可能。解题思路:模拟栈的问题而已。这道题其实也是组合数学卡特兰数的一个典型应用而已。下面就介绍一下卡特兰数。========================================转载 2017-08-11 20:32:12 · 197 阅读 · 0 评论 -
滚动数组
使用范围:使用在递推或动态规划中 作用:节约空间注意:时间上没什么优势举例1)作用在一维数组:普通方法:[cpp] view plain copyprint?int d[]=new int[100]; d[0]=1;d[1]=1; for(int i=2;i{ d[i]=d[i-1]+d[i-2] }转载 2017-08-19 04:46:36 · 365 阅读 · 0 评论 -
菜鸟都能理解的KMP算法
KMP算法其实是一个O(n)的字符串匹配算法A = "ababacbacab"B = "baca"假设位置从1开始这样可以说B是A的一个子串,首先我们想到的办法是枚举A的位置,比如1.首先枚举位置A[1],即字符'a',然后从A[1]开始比较"abab"是否等于"baca",显转载 2017-08-18 15:21:28 · 492 阅读 · 0 评论 -
OJ提交题目中的语言选项里G++与C++的区别
一、OJ提交题目中的语言选项里G++与C++的区别http://www.th7.cn/Program/cp/201405/199001.shtml首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编译器中编译C++程序的命令而已。那么他们之间的区别是什么?在提交题目中的语言选项里,G++和C++都代表编译的方式。准确地说,选择C++的话,意味着你将转载 2017-08-23 20:41:22 · 268 阅读 · 0 评论