上一页 1 ··· 4 5 6 7 8 9 10 11 12 下一页
摘要: 题目传送门:2502. 买珍珠思路: (参照 Ciel 的博客 sicily 2502 买珍珠)1. 本题可以用动态规划的思路,开数组costs,costs[i]表示买到等级 i 的珍珠时的最少话费,所以最后costs[n - 1]就是要的结果。从低等级的珍珠开始,自底向上构建costs数组。2. amounts数组记录少于等于每个等级的珍珠需求总数,这样做可以用amounts[i] - amounts[j]简单得到2个等级之间的珍珠总数。3. 17~22行的for循环就是用来构建costs数组,第18行先简单假设全部珍珠用这个等级的代替,然后在19~21行逐个判断从最低一级到第 j ... 阅读全文
posted @ 2014-03-31 13:52 Jolin123 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:7693. Cards思路:1. 用数组b[m]和r[n]表示两组卡片,开一个bool类型的矩阵match,match[i][j]为true则表示b[i]和r[j]可以组成一对。2. 要得到最多的匹配对数,从最优的感觉上来看可以求出每张卡片在另一组有多少卡片与之匹配,然后每次从蓝色组中找出匹配数最少的那张卡,并在与那张卡匹配的红组卡中找出匹配数最少的那一张组成一队消除。这样考虑的理由是:匹配数多是卡即使消去了与之匹配的其中一些卡,还有剩下的卡可以匹配,因此先消去匹配数最小的卡。3. 为了找到当前匹配数最少的那2张卡,开数组num_of_matches_b[m]记录每张蓝色卡当... 阅读全文
posted @ 2014-03-29 21:44 Jolin123 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 本章内容:1.聚合分析2.核算法3.势能法4.动态表一 聚合分析1. 在摊还分析中,我们求数据结构的一个操作序列中所执行的所有操作的平均时间,来评价操作的代价,它不涉及概率,可以保证最坏情况下每个操作的平均性能。2. 摊还代价:对所有n,一个n个操作的序列最坏情况下话费时间为T(n),从而摊还代价(平均代价)为 T(n) / n.3. 栈操作中加入MULTIPOP(S, k),可以同时删除栈顶的k个元素,总元素少于k则全部删除。 下面分析一个由n个PUSH, POP, 和MULTIPOP组成的操作序列在一个空栈上的执行情况。假设栈的大小最大为n,那么MULTIPOP的最坏情况代价是O... 阅读全文
posted @ 2014-03-27 09:25 Jolin123 阅读(1065) 评论(0) 推荐(0) 编辑
摘要: 本章内容:一 动态顺序统计二 如何扩张数据结构三 区间树一 动态顺序统计参照:红黑树1. n个元素集合中的第 i 个顺序统计量就是简单地规定为该集合中的具有第 i 小关键字的元素。对于一个无序的集合可以在O(n)的时间内确定任何的顺序统计量。这里修改一下红黑树使得可以在O(lg n)时间内确定任何的顺序统计量。2. 顺序统计树:在原先红黑树的每个结点x加入属性size , 表示以x为根的子树的总结点数(包括x),定义哨兵大小为0,即T.nil.size = 0. 有等式: x.size = x.left.size + x.right.size + 13. 为了使关键字可以相同,... 阅读全文
posted @ 2014-03-24 15:09 Jolin123 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:6768. Log Books思路:1. 这道题比较麻烦的是输入,时间的格式如12:04 ,这样后面再计算加减的时候会有问题,所以干脆转化成分钟,没一个时刻用该时刻是当天的第多少分钟表示,如12:04可以表示为第12 * 60 + 4 = 7242. 对于n个驾驶时间的信息,每次都要判断是否超过2个小时,按照题目只要有一次超过2个小时就NON。3. 累加总的驾驶时间以便最后判断是否达到50小时,还有每次要判断是否在夜间驾驶,累加总的夜间驾驶时间判断是否达到10小时。代码: 1 #include 2 #include 3 using namespace std; 4 5 ... 阅读全文
posted @ 2014-03-23 17:06 Jolin123 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 红黑树 普通的二叉搜索树高度如果较高时,一些集合操作可能不比链表上执行的快,而红黑树属于“平衡”搜索树的一种,可以保证在最坏情况下基本动态集合操作的时间复杂度为O(lgn).(一)红黑树的性质 红黑树是一棵二叉搜索树,在每个结点上增加了一个存储位来表示结点的颜色,可以为RED或者BLACK。通过一些约束可以保证没有一条路径会比其他路径长出2倍,因而是近似于平衡的。红黑树的5个性质:1. 每个结点或是红色的,或是黑色的。2. 根结点是黑色的。3. 每个叶节点(NIL)是黑色的。4. 如果一个结点是红色的,则它的两个子结点都是黑色的。5. 对每个结点,从该结点到其所有后代叶结点的简单路径上,均.. 阅读全文
posted @ 2014-03-22 20:41 Jolin123 阅读(1386) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:2500. 看风景思路: 可以先将n个人的身高读进数组h[n]中,找到一个下标i,使得h[0]到h[i]的递增子序列加上h[i + 1]到h[n - 1]的递减子序列的和最长即可。为了找到这个下标i,可以从0遍历到n - 1,以每一个下标为断点计算一次即可。 用数组i[n]存放到每个点的最长递增子序列,即i[k]表示[0,k]的最长子序列长度,这样要算i[k],可以从0到k - 1遍历,如果找到j(0 i[k]并且h[j] 2 using namespace std; 3 4 int heights[1000]; 5 6 int main(){ 7 int n;... 阅读全文
posted @ 2014-03-22 09:43 Jolin123 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:4952. Another Rock-Paper-Scissors Problem思路: 比较简单的一道题,不过也要理清逻辑思路。 姑且用1 2 3 代替R P S比较方便,题目意思是首先会出123 ,每次达到3的次方数之后就开始有人模仿,所以接着会出231 312,然后出231312123来打败模仿他前9次的人... 这里注意各个分界点是3的次方数,又有3 ^ 25 27 ,n - 27 = 6,意思是如果第6次出1,则第33次必须出2.又有6 > 3,6 - 3 = 3.即第3次出3,则第6次必须出1。同理第3次出的要累计赢第一次出的2次,因此总共算的话第33次出的要赢. 阅读全文
posted @ 2014-01-29 22:19 Jolin123 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 任何比较排序在最坏情况下要经过Ω(nlgn)次比较。而计数排序,基数排序和桶排序可以突破这个下界,因为它们不是比较来确定排序顺序的。1. 计数排序 计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。当k = O(n)时,排序的运行时间是Θ(n)。 假设输入是一个数组A[1..n],A.length = n.我们还需要两个数组:B[1..n]存放排序的输出,C[0..k]提供临时存储空间。伪代码: 在10到12行的循环部分,把每个元素A[j]放到它在输出数组B中的正确位置上。总的时间代价是Θ(k + n),实际工作中当k = O(n)时,一般采用计数排序,运... 阅读全文
posted @ 2014-01-29 11:30 Jolin123 阅读(382) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:7970. Encoded Message水题,输入的字符串长度一定是平方数代码: 1 #include 2 #include 3 using namespace std; 4 5 int main(){ 6 int testcases; 7 cin >> testcases; 8 while(testcases--){ 9 string message;10 cin >> message;11 int len = message.length();12 int gap = sqrt(le... 阅读全文
posted @ 2014-01-27 16:18 Jolin123 阅读(228) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 下一页