10 2014 档案

摘要:此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重要的一步,如果找不准边界,这个题也很难做出来,当时我就是找边界找了好长时间,边界得琢磨琢磨。递推步骤... 阅读全文
posted @ 2014-10-31 21:52 Howe_Young 阅读(291) 评论(0) 推荐(0)
摘要:排列在上一篇中已经写到,是个典型的深搜题,下面是介绍的组合数, 组合的基本定义是, 但是除了用这种传统的方法来求,可以用递归的方式或者是递推的方式来求, 说道递推,只要会递归, 就会递推了。关键的一部是递推式,可以定义一个函数func(int n, int k); 表示求的值,公式先放在这func(... 阅读全文
posted @ 2014-10-31 21:31 Howe_Young 阅读(2313) 评论(0) 推荐(1)
摘要:这个是理解标记和取消标记,用一个vis数组来标记全排列代码: 1 #include 2 3 int a[10]; 4 int vis[10]; 5 int n; 6 void dfs(int step)//step是当前已经进去排列的个数 7 { 8 if (step == n)//如... 阅读全文
posted @ 2014-10-30 18:30 Howe_Young 阅读(718) 评论(0) 推荐(0)
摘要:这道题目的递归思想和第一个题差不多, 主要思想是:func(n, m)的作用是将n划分为m个。1. 如果n m 的时候, 分为两种情况,一个是划分数中含有1, 一个是不含1, 所以含有1 的个数为func(n - 1, m - 1),意思就是从n去掉1,然后再划分m - 1个, 下面就是不含1的,... 阅读全文
posted @ 2014-10-30 16:59 Howe_Young 阅读(282) 评论(0) 推荐(0)
摘要:这个题理解了好大会才理解,看了网上的代码,不太理解,但是后来看了好几个人的, 大同小异吧,慢慢的就理解了。思路:递归函数的意思是, 将 n 划分为最大数为 m 的划分数, 可以分几种情况1. 当n = 1 的时候, 这时候就是将1划分, 也就是递归的出口, 1 肯定只能划分为 1, 所以返回12. ... 阅读全文
posted @ 2014-10-29 21:58 Howe_Young 阅读(233) 评论(0) 推荐(0)
摘要:这道题跟第二个题差不多,求单点的最大值。题目大意:有个高和宽分别为h, w的广告牌, 这个广告牌分成高为 1 的长条, 每条分别能贴长度为wi长度的广告, 输入的n为广告的条数,广告优先贴在最上边和最左边, 让输出每个广告能贴的层数,如果贴不下了,就输出-1主要思路:1. 建立线段树,初始化每个节点... 阅读全文
posted @ 2014-10-29 18:39 Howe_Young 阅读(383) 评论(0) 推荐(0)
摘要:其实输入输出外挂其实就是减少程序输入输出的时间, 因为常用的printf, scanf都要比cin, cout快,但是,有时候不用这个外挂的输出方式也会超时。而且这种输出方式对于大量数据的时候明显减少时间,其实它的快主要是因为 scanf和printf都是对缓冲区的读写操作,当程序执行的时候不会时间... 阅读全文
posted @ 2014-10-28 21:28 Howe_Young 阅读(768) 评论(0) 推荐(0)
摘要:此题和上题略有不同,但是大体差不多,不过要把题意转换过来,题目大体意思为, 输入n, 也就是n个数,这些数为0 - (n-1), 这些数刚开始给定输入的顺序, 然后求他的逆序数,然后接着把第一个移到这个数列的末尾,这时候再求出一个逆序数,直到移动一个周期,也就是移动了n次, 求他们之中的最小的一个逆... 阅读全文
posted @ 2014-10-28 20:23 Howe_Young 阅读(157) 评论(0) 推荐(0)
摘要:这个题也是线段树的基础题,有了上一个题的基础,在做这个题就显得比较轻松了,大体都是一样的,那个是求和,这个改成求最大值,基本上思路差不多,下面是代码的实现 阅读全文
posted @ 2014-10-28 15:18 Howe_Young 阅读(246) 评论(0) 推荐(0)
摘要:这个是线段树中最入门的题目,但是由于不了解线段树的概念,当然更不知道怎么样,所以觉得挺费劲,整了一会发现还是基本的思想,就是还是将一个线段继续分割,一直分割到不能分割,这道题目是知道多少个军营,也就是区间为1-n, 将它分割, 建立树, 可以不用保存它区间的左端点和右端点,用数组下标代表就可以了, ... 阅读全文
posted @ 2014-10-28 12:37 Howe_Young 阅读(2043) 评论(0) 推荐(0)
摘要:线段树是一颗二叉树,他的每个节点都是一个区间,此题为线段树的入门题目,只是学习笔记。例题:给定N个线段,给定M个点,求点在多少个线段中出现过,此时如果用传统的方法来求,时间复杂度太高,但是,线段树的时间复杂度还可以接受。步骤为:1. 首先找一个区间,能覆盖给定的所有区间, 然后把此区间建立线段树,建... 阅读全文
posted @ 2014-10-27 20:09 Howe_Young 阅读(776) 评论(0) 推荐(0)
摘要:这个题基本上是并查集稍微一变, 只是加了一些判断条件而已,就是将点合并成树, 最后遍历一下, 统计一下有多少棵树, 如果不是1的话, 肯定不是树,所以,可以根据这个来判断 1 #include 2 #include 3 #include 4 using namespace std; 5 6 ... 阅读全文
posted @ 2014-10-20 21:43 Howe_Young 阅读(174) 评论(0) 推荐(0)
摘要:并查集, 从这个名字上也可以知道是合并和查找集合的, 它也叫不相交的集的数据结构, 典型的例题有食物链, 来判断有多少个独立的树什么的, 下面一个例题,来简单的解释并查集:一个犯罪团伙一共有n个人, 现在只知道谁跟谁一伙, 来求出一共有多少个团伙, 代码如下: 1 #include 2 //并查集... 阅读全文
posted @ 2014-10-20 20:27 Howe_Young 阅读(215) 评论(0) 推荐(0)
摘要:二叉搜索树的建立是通过递归方式来建立的,和普通的二叉树的区别是加上了约束, 它的左子树的所有元素都要比根节点要小, 而右子树的所有元素都要根节点要大,左右子树也符合这个条件。他的遍历方式和普通二叉树的遍历没有什么区别。下面是关于二叉搜索树的添加节点和前序遍历,中序遍历, 后续遍历和层级遍历 1 //... 阅读全文
posted @ 2014-10-19 21:37 Howe_Young 阅读(336) 评论(0) 推荐(0)
摘要:堆是一种特殊的数据结构,它是完全二叉树,可以用一维数组来保存,因为二叉树的性质,所以根据数组下标就可以确定位置,下面代码是关于堆的实现, 删除的过程其实就是将堆的根节点取出的过程, 这时的顺序就是有序的, 如果是最小堆,那么就是从小到大排序,反之,就是从大到小 1 #include 2 3 in... 阅读全文
posted @ 2014-10-19 14:11 Howe_Young 阅读(250) 评论(0) 推荐(0)
摘要:字典树是哈希树的变种, 它采用公用前缀的方式来提高效率, 刚开始以为公用前缀, 空间会节省, 后来想想, 空间也不是节省, 因为每一个都有26个指针(这里假设都是小写字母的话), 不过他的时间复杂度是常数级的, 效率非常高, O(1)的复杂度, 它是典型的空间换时间, 他常用的功能是增删查, 其实删... 阅读全文
posted @ 2014-10-15 19:09 Howe_Young 阅读(209) 评论(0) 推荐(0)
摘要:重建二叉树主要是给你一颗二叉树的前序遍历的结果和中序遍历的结果或者后序遍历的结果或者中序遍历的结果,让你求出其中的后序遍历的结果或者前序遍历的结果,这里知道其中的两个就能求出第三个,但是知道的两个必须要有中序遍历,求这样的问题主要有两种方式,一种是把树建立起来,然后在遍历就行了,还有一种常用的方式是... 阅读全文
posted @ 2014-10-15 09:49 Howe_Young 阅读(306) 评论(0) 推荐(1)
摘要:因为树有多种表示方式,也可以不用二叉树来表示,但是那样有局限性, 就比如一个节点有几个孩子,这个数目都是不确定的,如果用二叉树来表示,那样就比较清楚的显示出家谱中的人员组成,但是不能用孩子表示法,因为那样最多只能表示两个孩子,但是可以转化一下表示方法,用孩子兄弟表示方法来表示,那样,就可以有无限多个... 阅读全文
posted @ 2014-10-07 17:18 Howe_Young 阅读(2845) 评论(1) 推荐(0)
摘要:题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=116士兵杀敌(一) 数组是固定的,所以可以用一个sum数组来保存每个元素的和就行,但是不能每次都加,因为那样会超时,查询次数太多。但是这个士兵杀敌(二)就不能用那个方法来解了,因为这个是动态... 阅读全文
posted @ 2014-10-07 13:05 Howe_Young 阅读(811) 评论(0) 推荐(0)
摘要:在建立二叉树的时候发现,那些叶节点的左孩子和右孩子的指针域都是空的,浪费空间,这时候就可以将这些空间利用起来,让遍历更加方便,这就是线索树存在的原因,线索树实现完了之后其实会发现就是一个双向链表,那种遍历就容易的多了。 1 #include 2 #include 3 4 typedef... 阅读全文
posted @ 2014-10-06 16:55 Howe_Young 阅读(635) 评论(0) 推荐(0)
摘要:转载自http://www.cnblogs.com/lyq105/archive/2009/11/28/1612677.html看着写着不错,就转了,保存一下C语言函数sscanf()的用法sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( str... 阅读全文
posted @ 2014-10-06 16:46 Howe_Young 阅读(1111) 评论(0) 推荐(0)
摘要:二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了。这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已。建立和遍历的方式差不多。也分好几种方式建立,这里 就写一种,就是先序建立 1 #include 2 #includ... 阅读全文
posted @ 2014-10-04 16:44 Howe_Young 阅读(9984) 评论(0) 推荐(0)