上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 37 下一页
摘要: 解题报告:有N个村庄,要在这N个村庄之间修路,要求修好路之后所有的村庄都能连通,输入一共有N*(N-1)/2个,即已知每一对村庄之间的距离。此题个人觉得用普莱姆算法比较好,因为已知每两个村庄之间的距离,同时也是因为一开始用克鲁斯卡尔交了n遍都没过,改用普莱姆一次就过了。 1 #include 2 #... 阅读全文
posted @ 2013-07-17 17:24 xiaxiaosheng 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 解题报告:1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6个人,即只用6个人就可以将他们联系在一起,因此他的理论也被称为“六度分离”理论(six degrees of... 阅读全文
posted @ 2013-07-17 08:39 xiaxiaosheng 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 解题报告:这题的意思是一开始电脑中有一个1,现在定义如下规则,每经过一个步骤之后,一个1可以变为01,一个0可以变为10,所以一开始的1经过第一步的变换之后就变为01,然后01经过第二步的变换之后就变成1001,...........,现在要做的就是让你确定经过n步操作之后,里面有多少个连续的00.我们可以这样推理,00可以经过什么样的排列得到,也就是将00反着推回去,00的上一步就是01,并且只能是01,然后01的上一步可以是一个1,也可以是00,所以地推的公式也出来了,第n步之后00的个数就是dp[n] = dp[n-2] + 2^(n-3) (是2的n-3次方),因为dp[n-2]就是等 阅读全文
posted @ 2013-07-17 08:30 xiaxiaosheng 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 解题报告:题目大意,给你n个球,要将这n个球从下到上按层次排列,要求同一个层次的的每一个分支的数量都必须相等,问有多少种排列的方法。此题的一个DP题,假设现在有n个球,要将这n个球排列好,我们就必须将n个球的问题转化成小于n个球的子问题 ,我们可以很明显地观察到,对于每一种排列 的方法,它的最上面的那一层总是只有一个球,所以我们就可以这样出发,将这n个球先减掉一个球,还剩下n-1个球,然后就是下一层怎么排列 的问题了。由于现在还剩下n-1个球,那么我们现在要想的就是把这n-1个球应该怎么排列,很显然,我们可以在第二层只放一个球,也可以放两个球,3个,四个、、、、n-1,判断下面一层放i个球到底 阅读全文
posted @ 2013-07-16 08:45 xiaxiaosheng 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 解题报告:题目大意,给出一个无向图,判断图中是否存在欧拉回路。判断一个无向图中是否有欧拉回路有一个充要条件,就是这个图中不存在奇度定点,然后还要判断的就是连通分支数是否为1,即这个图是不是连通的,这个用并查集就可以了。 1 #include 2 #include 3 #include 4 using namespace std; 5 int map[1005]; 6 int prim[100005]; 7 int find(int n) { 8 return prim[n]==n? n:(prim[n] = find(prim[n])); 9 }10 11 int main() {12... 阅读全文
posted @ 2013-07-15 16:35 xiaxiaosheng 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 解题报告:题目大意是输入两个数N和M,N表示一开始输入N个字符串,并且保存起来,然后再输入M个字符串,并且在输入M个字符串的同时要求判断每次输入的字符串是否已经存在,要注意的是后面输入的M个字符串每次输入之后如果判断不存在的话,还要把输入的这个字符串保存起来。第一个用STL map容器过的题,纪念一... 阅读全文
posted @ 2013-07-15 10:42 xiaxiaosheng 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 解题报告:题目大意,在第0微秒的时候有一个高能质子,定义有如下反应,当一个高能质子撞击核子时,质子被吸收,同时放出3个高能质子和一个低能质子,如果一个低能质子撞击核子的话,可以放出两个高能质子和一个低能质子,问在第n微秒的时候一共有多少个高能质子和低能质子。超级简单DP题,打表就可以了,不打表也行,假如定义一个数组high[34]表示高能质子的个数,和一个数组low[34]表示低能质子的个数,那么递推的公式就是:high[i] = 3*high[i-1] + low[i-1];low[i] = high[i-1] + low[i-1];本题要注意的就是数据范围可能比较大,所以要__int64( 阅读全文
posted @ 2013-07-05 23:12 xiaxiaosheng 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 解题报告:题目大意:就是要求输入的N个数里面出现的次数最多的数是哪一个,水题。暴力可过,定义一个一位数组,先用memset函数初始化,然后每次输入一个数就将下标对应的上标对应的那个数加一,最后将整个数组都扫一遍, 看哪一个最大就可以了。 1 #include 2 #include 3 int times[1000005]; 4 5 int main() { 6 int N,d; 7 while(scanf("%d",&N)!=EOF) { 8 memset(times,0,sizeof(times)); 9 for(int i = 1;itim... 阅读全文
posted @ 2013-07-05 23:05 xiaxiaosheng 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 解题报告:给若干个居民的年龄排序,年龄的范围在1到100之间,输入的总人数在0到200W。这题要注意的输入的文件约有25MB,而内存限制为2MB,所以如果人数是像200W这样多的话,甚至都不能把它们都读入内存,所以就不能用快速排序等各种排序,只能通过标记来进行排序,这题很明显的一个特征就是要排序的数... 阅读全文
posted @ 2013-06-26 20:45 xiaxiaosheng 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 解题报告:有一个从1、2、3、.......n的正整数数列,现在要通过若干次操作将这个数列全部变为0,操作的方法是每次选取任意1个或多个任意位置的数,然后将这几个数同时减去一个一个数。问至少要经过多少次操作才能让数列全部变为0.这题一看就有点DP的风格。举一个例子,1、2、3、4、5,对于这五个数,... 阅读全文
posted @ 2013-06-20 22:38 xiaxiaosheng 阅读(537) 评论(0) 推荐(0) 编辑
上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 37 下一页