上一页 1 ··· 4 5 6 7 8 9 下一页
摘要: 昨天开始了强连通,原本以为这一道题目是求强连通分量的个数的。。。但是题意就是求这是否是一个强连通图。。所以题意不解释了。。做题方法大概就是,先深搜一边,入栈,从栈顶去元素深搜如果能够搜到所有的点,那么就说明这是一个强连通图。举个例子,如果图能从节点1出发寻找到所有的点,然后现在将有向边方向,如果还能搜到所有的点的话,就是一个强连通图,因为能够通过1搜索所有点,然后反边就说明能够从任一点到达1点。。理解了上面这段话就好说了。。View Code 1 #include<iostream> 2 using namespace std; 3 #define Size 100010 4 .. 阅读全文
posted @ 2012-09-01 21:46 诺小J 阅读(566) 评论(0) 推荐(0) 编辑
摘要: 题意很明显,就是说现在有n个孩子正在玩游戏,完成一个传递的游戏,举个例子,A传递到B小朋友,然后B小朋友传递给C小朋友,那么此时,C小朋友将拥有2的传递值,C是胜利者,若C又传递回A,那么A,B,C三者都拥有传递值为2的胜利者,说白了就是强连通的一个练习。思路就是分清楚这整个图当中的强连通分量,每个分量包含了哪些点,将这些分量缩成一个点,然后建立这些点的一个反向图,然后每次从入度为0的强连通分量深搜,最后标记哪些强连通分量为max。那么只要该点所属的强连通分量为max,那么该点,也就是该小朋友就是赢家。。View Code 1 #include<iostream> 2 #defi. 阅读全文
posted @ 2012-09-01 21:46 诺小J 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 最近学了一些dp的皮毛之后,现在开始图论知识的学习,说实话,初步不知道怎么弄这个,然后无意间在网上下了一本关于图论的算法设计程序的教程,然后感觉还不错,结果后面才发现原来多年前,我的师兄就给了我这样一本好的资料。感觉有点小悲催啊。。~有点对不起师兄的感觉,然后今天终于写了一个小知识点,欧拉回路的一题,其实这个也包含了通路的知识。还是说一下题意吧。。现在你是一个豪宅的管家,因为你有个粗心的主人,所以需要你来帮忙管理,输入会告诉你现在一共有多少个房间,然后会告诉你从哪个房间出发,你的任务就是从出发的房间通过各个房间之间的通道,来把所有的门都关上,然后最后回到0的房间。一开始写的时候,我想因为我自己 阅读全文
posted @ 2012-09-01 21:45 诺小J 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 起先,队友和我说过并查集,但是看到这道题目的时候我想还是暂时不用,先凭自己的想法做一下的好,所以就自己闷着脑袋开始做了,然后就开始自己的深搜的,反正这个城市给我的的道路我们建好了一个图之后,只要发现这个图里面的一条边的话我们就计算一次,然后累加,最后组成一个连通图的最小边数就是n-1,所以只要拿n-1-累加的边数就可以了啊。。代码具体如下:View Code 1 #include<iostream> 2 using namespace std; 3 int f[1002][1002],Count,visit[1002]; 4 int n,m; 5 void dfs(int... 阅读全文
posted @ 2012-09-01 21:44 诺小J 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 起初也不知道这个题目还有一个更为简单易想的办法,那就是记忆化的搜索。因为题目的基本意思就是要你匹配给你字符串的所有长度的前缀在字符串当中所出现的次数,那么这个时候我们可以设计一个简便的记忆方法。设置一个place来记录每次新的前缀长度所匹配的位置信息。例如ababab这个字符串我们可以首先让这个place数据先匹配“a”字符串,那么匹配a的位置信息就是Place={1,3,5}一共三次然后匹配"ab"字符串,只用在以前place的基础上匹配后面跟的'b'就行,因为只有出现过'a'的位置才可能匹配"ab"字符串,所以第二次匹 阅读全文
posted @ 2012-09-01 21:43 诺小J 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 长话短说,题目的意思很明确,就是让给你一个字符串,然后计算不断增加的前缀字符串在整个字符创当中出现的次数,可能出现的次数过大,所以要求结果%10007.Kmp算法,相信正在做此题的人应该都会对这个有所了解,对于整个字符串做一个预处理,生成一个next的数组,其中的内部数据next[i]=j就表示在前i个字符串当中,从前1到j的j长度字符字串和i-j+1到i的j长度的字符字串相等。那么举一个例子就可以知道:ababab001234那么接下来就是关于dp的状态方程的理解了dp[i]=dp[next[i]]+1;具体意思就是说利用next数据跳转到第next[i]的位置,这个位置的跟之前的有过多少次 阅读全文
posted @ 2012-09-01 21:42 诺小J 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 说白了,题目就是给我们n个点,要求我们对这n个点围成的多边形求其重心,说实话一开始都没有接触过计算几何的东西,有些东西不理解啊..~~当质量其中的顶点上的时候,设其顶点的质量为m则对于n各点而言,n个点的重心为:Focusx=∑(xi*mi)/∑mi;Focusy=∑(yi*mi)/∑mi;i从0到n当这其中的n个点的质量平均的时候,那么Focusx=∑xi/n;Focusy=∑yi/n;对于三角形而言,给你三个坐标点,重心的坐标就是三个坐标点之和除3。那么这个题目如果按照对n个点求和除n的话,精度太低,所以会wa,这是我最初的想法,悲催~~正确的思路应该是将这n个点分解成n-2个三角形求其重 阅读全文
posted @ 2012-09-01 21:41 诺小J 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 悲催了..~~这道01背包的题目我wa了好多遍,感受还是颇多的...说是01背包,但是还是有一定的研制条件的。。。首先当饭卡当中的钱不足5块的时候是不能消费的,所以就应该是原来的值。这里就wa了很多遍啊s。然后变通一下,要使得饭卡当中所剩余额最小,那么也就是说最大价格的那道菜要在最后买,这样才能得到最优解,那么对于其他n-1道菜就是一个简单的0-1背包了,只是这儿有一个变通,那就是背包所能得到的价值和它所耗空间是一样的...接下来就看代码好好体会了。。。View Code 1 #include<iostream> 2 #include<stdio.h> 3 using 阅读全文
posted @ 2012-09-01 21:40 诺小J 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 可能是自己的英语不好,一开始不能理解题目的意思,所以还是先讲一下题目的意思,现在acboy有m天的时间来修n门课程,然后给你一个矩阵,A[i][j]表示话J天的时间学习i门课程能够得到A[i][j],那么我们的任务就是把acboy所拥有的天数m天分成一些部分来学习这其中的课程,使得能够在学校课程当中收获最多。看过背包九讲的话,做这个就容易多了,其实就是简单的分组背包问题。View Code 1 #include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 int dp[110],value[110][11 阅读全文
posted @ 2012-09-01 21:39 诺小J 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 题意简单明确,打怪升级,现在需要n的经验就可以升最后一集,但是现在玩家有一定的忍耐限度m,因为打怪升级是在无聊,现在有k种怪兽,每种怪兽打败之后都能获得一定的经验值,现在告诉你打败该怪兽玩家能获得经验value1,以及打完该怪兽之后忍耐限度降低value2,现在要求你编写程序算出玩家能够升级并能保存的忍耐限度最大的值,输出最大值。其实就是一个二维费用的背包问题,研读背包九讲当中的第五讲就能知道,只不过是多开一个状态,那么就是Dp[i][j][k]在前i个物品下,花费j、k的代价最大能取到的价值,那么这个题目当中所表达的就是在前i个怪兽下,花费j的忍耐度打到k个怪兽所能获得的最高经验值。View 阅读全文
posted @ 2012-09-01 21:39 诺小J 阅读(164) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 下一页