摘要: 数塔问题基本模型 如上图所示数塔, 要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 数塔思想: 自顶向下分析, 自底向上计算。H(i) 表示第i层的最大值。要得到H(i + 1), 则考虑上一层结点, 到其相邻节点可取得的值, 取最大值作为H(i + 1)。 如果按照上述做法, 从顶到底算起, 则时间复杂度为 O(2^(n – 1)); 考虑从底部算起,计算每个结点到底层的最大值,即上一层结点与其相邻节点的最大值,以这个最大值作为上一层结点的值, 重复这一过程,直到塔顶。时间复杂度为O(n)简单应用多少条路径 猴子爬树, 最初猴子在第一棵树... 阅读全文
posted @ 2012-10-03 17:29 ProgrammingEveryday 阅读(437) 评论(0) 推荐(0) 编辑
摘要: 不相交集合数据结构保持一组不相交的动态集合,集合中每一个元素有一个对象表示,或称其为代表。其主要操作有三个, Make_Set(x) ; 对集合x进行初始化,每一个元素就是一个对象。 Union(X,Y) ; 将包含集合X,Y的动态集合合并为一个新的集合; Find_Set(x) ; 返回包含x的集合的代表; 不相交集合的一个应用,确定无向连通图中的连通子图的个数。可以采用链表形式,数组形式,和有根树的方式表示。 基本过程是 Connected_Components (G) //G 表示无向图 Connected_Components (G) {   for each vertex v ∈ V(G); // V(G) 表示G中的所有点定点    do Make_Set(v);   for each edge(u,v)∈ E(G); //E(G) 表示G中的所有边     do if(Find_Set(u) != Find_Set(v))        then Union(u,v); } 阅读全文
posted @ 2011-07-21 10:05 ProgrammingEveryday 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 这个题大家一看到可能就会想到用并查集,高手们都用这种方法解决这个问题。像我,刚刚学习编程不久,还不知道什么是并查集, 所以我就自己写了个解决方法。 我的思路是 帮所有可以相通的城市化为一个城市群,称之为层。这个题的关键就是求出所有的层,添加最少的道路即为层数减一条。 阅读全文
posted @ 2011-06-16 13:27 ProgrammingEveryday 阅读(641) 评论(0) 推荐(0) 编辑
摘要: 其实这题比较简单,主要是考排序算法和比较的过程,只要细心就好了,特别是看懂题目。 很容易就会给所有的国家排名,其实只要给要求排名的国家排名就好了。 我的思路是 根据四种排名方式,选用qsort()给要求排名的国家排序,然后各自榜排名的结果与上次排名相比较, 有更加好的排名就替换上次一的排名。这样排完所有的方式,此题得解。 阅读全文
posted @ 2011-06-16 12:56 ProgrammingEveryday 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 杭电ACM2049 考新郎,关于大整数的考虑和递归或迭代 阅读全文
posted @ 2011-06-09 15:24 ProgrammingEveryday 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 第一次看到这个题目,完全没有思路,突感数学知识的欠缺。Google之后,知道了这题的解法。如果该小数number不是循环小数,这很好办。将number化成整数,再除以扩大的倍数,化简即可。若number是循环小数,其实也简单。如果数学知识好的应该知道,把一个循环小数化成整数是有规律的。比如 0.(5) = 5 / 9; (括号里的是循环的部分)0.(123) = 123 / 999;0.00(987) = 987 / 99900;0.12300(345) = 123 / 1000 + 345 / 99900000;以上数学知识来源于http://www.worldlingo.com/ma/en 阅读全文
posted @ 2011-06-08 12:20 ProgrammingEveryday 阅读(220) 评论(6) 推荐(0) 编辑