摘要: 题意:在一棵苹果树上,有n个节点,第一天,只有叶节点才有苹果,苹果的数目等于该节点的编号。第二天开始,其他节点开始长苹果,对于非叶节点,只有当所有直接子节点都长了苹果之后才开始长,设它的直接子节点数目为K,则该节点的苹果数等于所有直接字节点苹果数目中的第(K + 1) / 2大。问最后根节点的苹果数目。分析:一开始感觉这题意太朦胧了,研究了半天都没明白。明白题意之后就好办很多了,类似与DP的过程,从根节点开始算,往下搜,再递推回来。用vector实现方便很多View Code #include<iostream>#include<algorithm>#include&l 阅读全文
posted @ 2012-02-14 23:36 枕边梦 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 题意:给定n个点,刚进行两种操作,将两个点合并,以及将一个点孤立,问最后点有几堆分析:删除一个点,只是将该点独立起来,或者说将该点从所在集合中脱离,而所在集合的结构不变,若真的将该点从集合中删去,会带来很多不必要的麻烦,所以,可以反而添加一个虚拟的点代替独立出来的点,这样,用一个数组将每一个点都映射到一个虚拟的点上,之后在虚拟的点上面操作即可。当要独立一个点时,只需将该点映射到另一个原先不存在的点即可。之后,统计集合个数有俩种方法,一个是根据集合含有的元素的个数,另一个则是统计根节点的个数。其一#include<iostream>#include<algorithm># 阅读全文
posted @ 2012-02-14 20:14 枕边梦 阅读(967) 评论(0) 推荐(0) 编辑
摘要: 题意:题中给的图填上1~8 八个数字,相连的点不能填上连续的数字分析:各种限制条件,直接dfs了View Code #include<iostream>#include<algorithm>#include<math.h>using namespace std;bool g[10][10],fil[10];//g[10][10]记录点与点之间是否相连,fil[10]记录该数字是否已经选过int a[10],ans[10],num;//ans[]保存路径void dfs(int deep,int move[]){ if(deep==8)//选完了 { if(! 阅读全文
posted @ 2012-02-14 15:41 枕边梦 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 题意:这题意真的十分费解,看了好久才明白。给定N个数字,产生p个子序列,序列满足:先按长度排列,而且子序列本身是递增的;之后,按子序列中各个数字所在位置排序。最主要的就是判重还有“子序列必须满足递增”具体的解释看代码吧View Code #include<iostream>#include<algorithm>using namespace std;struct node{ int v,pos;}ans[1001];int a[1001],n,p,nnum,total;bool check(int s,int e)//判重,我觉得是这道题目的关键{ for(int i= 阅读全文
posted @ 2012-02-14 01:39 枕边梦 阅读(316) 评论(0) 推荐(0) 编辑