随笔分类 -  Algorithm

摘要:二叉苹果树 题目意思:有一个二叉树,每个树枝都有若干个苹果,现在要保留一些树枝,把其它的树枝删掉,问这棵树最多能保留多少个苹果? 输入:第一行有两个数N和Q,N(2 ≤N≤ 100;1 ≤Q≤N− 1)代表二叉树中结点的个数,Q代表保留的树枝的个数。接下来的N-1行描述二叉树的边,每条边包含两个结点和边上苹果的数量。端点是按1,2,3...N编号的,1代表根结点,删除的树枝中不能包含根结点。 输出:在保留的树枝中苹果的最大数量 样例输入: 5 2 1 3 1 1 4 10 2 3 20 3 5 20 样例输出: 21思路: 这是一个用树状dp来解决的问题,对于dp,当然... 阅读全文
posted @ 2013-05-23 16:21 在于思考 阅读(573) 评论(0) 推荐(0)
摘要:各省的旗子 题目意思:有n种颜色,需要用这n种颜色为某个国家的各省创建旗子,并满足条件:每个省的旗子至少有一种公共的颜色,每种颜色不会同时出现在三个或更多的旗子上。求满足上面条件能创建的最多的旗子数。 输入:n(3 ≤n≤ 1000) 输出:第一行输出旗子数k,接下来的k行输出每面旗子中包含的颜色个数和颜色编号(1,2,3...n),它们之间用空格隔开。这样的解可能会有多个,只要其中的一种就可以了。 样例输入: 4 样例输出: 3 2 1 2 2 1 3 2 2 3 思路: 通过题目意思可以理解到每面旗子要与其他旗子至少有一种公共的颜色,而且这些公共颜色是不同的,所... 阅读全文
posted @ 2013-05-20 10:13 在于思考 阅读(300) 评论(0) 推荐(0)
摘要:1303 最小覆盖 题目的大概意思:给一组线段[Li, Ri],Li, Ri都是整数,在这组线段中找出数量最少的线段使这些线段能完全覆盖[0,M]。 输入: 第一行整数M (1≤M≤5000)。 后面是整数对,每对Li, Ri(abs(Li), abs(Ri)≤50000)占一行。最后一行为0 0表示结束。 输出: 第一行打印完全覆盖[0,M]的最小线段数。 后面打印覆盖[0,M]的线段,格式和输入一样。 如果不存在完全覆盖则打印“No solution” 思路:尽量选择覆盖[0,M]长的线段,这也是很明显的,线段覆盖[0,M]越长,完全覆盖[0,M]所需要的线段数必然越... 阅读全文
posted @ 2013-05-15 19:23 在于思考 阅读(579) 评论(0) 推荐(0)
摘要:1 第一题小Q系列故事——屌丝的逆袭 表示这道题基本没什么算法,学过计算机语言的应该都能搞定吧。2 第二题小明系列故事——买年货 这道题直接用01背包问题就可以解决了,只是除了钱的限制,还有积分的限制和免费的情况,就是这点在调试程序的时候出了点小问题,总是wa。状态可以定义为dp[x][y][z],x表示钱的,y表示积分的,z表示免费的状态,然后其它的和背包问题差不多了,只是维数到了3维。 1 #include <stdio.h> 2 #include <string.h> 3 4 #define max(a,b) a > b ? a : b 5 int n, v 阅读全文
posted @ 2013-04-16 14:27 在于思考 阅读(761) 评论(0) 推荐(0)
摘要:平衡负载 Du熊正在负责一个大型的项目,目前有K台服务器,有N个任务需要用这K台服务器来完成,所以要把这些任务分成K个部分来完成,在同上台服务器上执行的任务必须是连续的任务,每个任务有各自需要的执行时间。 例如N=5,K=2,每个任务需要时间分别为5,3,1,4,7分钟,那么我们可以分成(5)(3 1 4 7)两部分,这样第一台服务器所花时间就是5分钟,而第二台机器需要花15分钟,当然,所有任务完成的时间是按最迟完成的那台服务器的时间,即这样划分的话完成所有任务所需要的时间就是15分钟。而另外一种划分方法是(5 3 1)(4 7),这种划分方案完成所有任务的时间就是11分钟,也是最优的一种.. 阅读全文
posted @ 2013-04-16 09:13 在于思考 阅读(1488) 评论(6) 推荐(0)
摘要:红黑树的定义和插入在红黑树的实现(一)中已经描述和实现了,下面说一下红黑树的删除。 红黑树的删除也包括两个步骤: 1.删除结点 2.调整树满足红黑树的定义 首先是删除一个结点,同样可以按二叉排序树的删除结点来删除。删除结点又分为4中情况: (1)删除结点没有左孩子,有右孩子 (2)删除结点没有右孩子,有左孩子 (3)删除结点为叶子结点 (4)删除结点既有左孩子又有右孩子 对于情况(1),可以直接用右孩子代替删除的结点,并且由于删除结点有右孩子,所以删除结点必定为黑色,右孩子必定为红色(假设删除结点为红色,右孩子必定为黑色,这样是违反红黑树定义4的,所以删除结点必定为黑色,... 阅读全文
posted @ 2013-04-09 20:20 在于思考 阅读(1205) 评论(0) 推荐(1)
摘要:由于看个东西,发现要用到红黑树,所以拿算法导论看了下红黑树的定义和实现,第一遍看发现红黑树挺复杂的,第二遍再看发现好了点,第三遍又好点。。。n遍之后终于有点理解了。最后打算自己实现这个红黑树,也能更好的理解它。1 红黑色定义 首先红黑树的定义是非常重要的,它的定义如下: 1.一个结点要么是黑色,要么是红色,只能是其中的一种。 2.树的根结点一定是黑色。 3.如果一个结点为红色,那么它的孩子结点必定为黑色。 4.从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。 正是有了这个定义,使得红黑树保持了良好的性质,如树的高度不会超过2lgn,所以对某个关键字的查找时间为o(... 阅读全文
posted @ 2013-04-09 17:00 在于思考 阅读(1663) 评论(4) 推荐(1)
摘要:题目的意思:有一堆大理石,按其大小分为1-6种价值,两个人想分得的价值相同的大理石,已知每种价值的大理石个数,问是否能让两个人分得价值相同的大理石?题目输入:101200100011000000题目输出:Collection#1:Can'tbedivided.Collection#2:Canbedivided.解题思路:很明显这是一个多重背包问题,可以将问题转化为0/1背包问题解决。将每种价值v的大理石数x,按二进制分解成价值为1*v,2*v,4*v…,2^k-1*v,(x-2^k+1)*v的大理石,其它价值的大理石也这样分解,这样就转化成为0/1背包问题了(由于1,2,4…,2^k- 阅读全文
posted @ 2013-03-13 20:50 在于思考 阅读(250) 评论(0) 推荐(0)
摘要:题目的意思: 一条路径的起点和终点相同,就是一只「环」。有向图的环,可以特地称作​​「有向环」;无向图的环,可以特地称作​​「无向环」。环上每个点都恰好连着两条边。无向环以另一种角度来看,就是两条路径,两条路径的起点相同、终点也相同。习惯规定一个环至少三个点。 藉由Floyd-Warshall Algorithm 的过程,顺手穷举所有可能的最小环。代码如下:#include <stdio.h>#include <string.h>int n;//交叉点的数量int m;//路径的跳数int edge[101][101];//记录每条边的情况,以及使用情况int d[10 阅读全文
posted @ 2013-01-23 10:20 在于思考 阅读(196) 评论(0) 推荐(0)
摘要:Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B。所以,我们假设Dis(AB)为节点A到节点B的最短路径的距离,对于每一个节点X,我们检查Dis(AX) + Dis(XB) < Dis(AB)是否成立,如果成立,证明从A到X再到B的路径比A直接到B的路径短,我们便设置Dis(AB) = Dis(AX) + Dis(XB),这样一来,当我们遍历完所有节点X,Dis(AB)中记录的便是A到B的最短路径的距离。代码如下:for ( int i = 0; i < 节点个数; ++i ){ for ( int j 阅读全文
posted @ 2013-01-23 10:14 在于思考 阅读(274) 评论(0) 推荐(0)
摘要:KMP算法一、理论 参考于:http://www.cnblogs.com/hxsyl/p/3300344.html 先介绍前缀数组是如何产生的。首先,要了解两个概念:"前缀"和"后缀"。 "前缀"指除了最后一个字符以外,一个字符串的全部头部组合;"后缀"指除了第一个字符以外,一个字符串的全部尾部... 阅读全文
posted @ 2013-01-19 16:43 在于思考 阅读(824) 评论(3) 推荐(0)
摘要:题目描述:给定字母与数字的映射关系:1 ij 2 abc 3 def4 gh 5 kl 6 mn7 prs 8 tuv 9 wxy 0 oqz根据输入的数字字符串,和已经存在的字符串词典,求出符合给出的数字字符串的字符串序列,要求这个序列中字符串的个数最少输入:数字字符串字典中包含的字符串个数字符串 …有多个case输入,数字字符串为-1结束所有的case输入73251890875ityourrealityrealour42949672965ityourrealityrealour-1输出:reality ourNo solution.输出满足条件的任意一组字符串序列,如果没有满足条件的,输出 阅读全文
posted @ 2013-01-19 16:37 在于思考 阅读(363) 评论(0) 推荐(0)