摘要:
数塔问题基本模型 如上图所示数塔, 要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 数塔思想: 自顶向下分析, 自底向上计算。H(i) 表示第i层的最大值。要得到H(i + 1), 则考虑上一层结点, 到其相邻节点可取得的值, 取最大值作为H(i + 1)。 如果按照上述做法, 从顶到底算起, 则时间复杂度为 O(2^(n – 1)); 考虑从底部算起,计算每个结点到底层的最大值,即上一层结点与其相邻节点的最大值,以这个最大值作为上一层结点的值, 重复这一过程,直到塔顶。时间复杂度为O(n)简单应用多少条路径 猴子爬树, 最初猴子在第一棵树... 阅读全文
摘要:
不相交集合数据结构保持一组不相交的动态集合,集合中每一个元素有一个对象表示,或称其为代表。其主要操作有三个,
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);
} 阅读全文
摘要:
这个题大家一看到可能就会想到用并查集,高手们都用这种方法解决这个问题。像我,刚刚学习编程不久,还不知道什么是并查集,
所以我就自己写了个解决方法。
我的思路是 帮所有可以相通的城市化为一个城市群,称之为层。这个题的关键就是求出所有的层,添加最少的道路即为层数减一条。 阅读全文
摘要:
其实这题比较简单,主要是考排序算法和比较的过程,只要细心就好了,特别是看懂题目。
很容易就会给所有的国家排名,其实只要给要求排名的国家排名就好了。
我的思路是 根据四种排名方式,选用qsort()给要求排名的国家排序,然后各自榜排名的结果与上次排名相比较,
有更加好的排名就替换上次一的排名。这样排完所有的方式,此题得解。 阅读全文
摘要:
杭电ACM2049 考新郎,关于大整数的考虑和递归或迭代 阅读全文
摘要:
第一次看到这个题目,完全没有思路,突感数学知识的欠缺。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 阅读全文