上一页 1 ··· 68 69 70 71 72 73 74 75 76 ··· 182 下一页
摘要: 题意:给定n,问有n个点的连通图有多少种,每个点是不同的。分析:求出有n个点的图有多少种,求出不连通的有多少种,相减即可。求有n个点的不连通图时,枚举第n个点所在的连通分支有几个点,有k个点的话,除去第n点,还要选k-1个点,有C(n - 1, k -1)种选法。剩余n-k个点,这n-k个点随意构图,每两点间要么有边,要么没边,两种选择。有2^C(n-k,2)种情况。则用C(n - 1, k -1)乘以2^C(n-k,2)再乘以k个点构成连通图的情况总数,这样规模为n的问题转化为规模为k的子问题。dp处理即可。View Code import java.io.*;import java.uti 阅读全文
posted @ 2011-09-30 15:41 undefined2024 阅读(586) 评论(0) 推荐(0)
摘要: 二分图匹配题意:给定一个r*c的棋盘,其中每列有2个白色格子,其余为黑色。要求选出c个白色格子,且每列一个,且每行至少一个。问能否实现,给出方案。分析:如果r>c则必定无法满足,因为即使每列一个,均位于不同行,还是会有某些行没有被选中的格子。对于其余情况,先进行简单的二分图匹配(每行作为1点构成第一点集,每列作为1点构成第二点集,每个白色格子作为连接其行列点的边),如果每行都能匹配上则首先可以保证每行都有选中的格子,当然此时可能有一些列还有没有被选中的格子,只要在该列里随便选1个白的就行了,不会影响结果。View Code #include <iostream>#includ 阅读全文
posted @ 2011-09-29 21:41 undefined2024 阅读(365) 评论(0) 推荐(0)
摘要: 题意:从左到右n个格子,某些有石子,每格永远只能放一个石子,每次可以将某个石子向左移若干格,但不能跨越任何石子。两人轮流操作,谁无路可走谁输。分析:我们把棋子按位置升序排列后,从后往前把他们两两绑定成一对。如果总个数是奇数,就把最前面一个和边界(位置为0)绑定。 在同一对棋子中,如果对手移动前一个,你总能对后一个移动相同的步数,所以一对棋子的前一个和前一对棋子的后一个之间有多少个空位置对最终的结果是没有影响的。于是我们只需要考虑同一对的两个棋子之间有多少空位。我们把每一对两颗棋子的距离(空位数)视作一堆石子,在对手移动每对两颗棋子中靠右的那一颗时,移动几位就相当于取几个石子,与取石子游戏对应上 阅读全文
posted @ 2011-09-29 16:39 undefined2024 阅读(1309) 评论(0) 推荐(1)
摘要: 题意:给定若干基因片段,求包含所有片段的最短基因序列长度。分析:cost[i][j]表示把j串接在i穿后面最少需要添加几个字符,先求出整个cost矩阵,然后枚举这些串的全排列,对于每种排列求长度,更新最小值。View Code #include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;#define maxn 15#define maxl 25int n;char gen 阅读全文
posted @ 2011-09-29 15:42 undefined2024 阅读(931) 评论(0) 推荐(1)
摘要: 二分简单题View Code #include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <cmath>using namespace std;struct Elem{ int a, b;}ans;double n;int lim;int binarysearch(int x){ int l = 1; int r = min(lim, x * 10); while (l < r) { int mid = (l + r) / 2; 阅读全文
posted @ 2011-09-29 09:28 undefined2024 阅读(393) 评论(0) 推荐(0)
上一页 1 ··· 68 69 70 71 72 73 74 75 76 ··· 182 下一页