摘要: 题意:两个人A,B玩游戏,轮流玩,A 先取,每个人每次只准在右边或左边拿1个或多个数,每个人都采取最优策略尽量让自己的得分高问A-B的最大值View Code // File Name: 10891.cpp// Author: zlbing// Created Time: 2013/1/23 17:46:22#include<iostream>#include<string>#include<algorithm>#include<cstdlib>#include<cstdio>#include<set>#include&l 阅读全文
posted @ 2013-01-23 18:35 z.arbitrary 阅读(351) 评论(0) 推荐(0)
摘要: 求最大公共子序列LCS,由于这题的数据比较大n=250*250,O(n*n)的方法不行。。又因为这题有一个特殊条件,每个序列的元素各不相同由于A,B序列元素各不相同,因此可以把A中的元素重新编号1~p+1,故B中的元素也相应的变化。结果答案变成求B的LIS。列如样例:A={1,7,5,4,8,3,9},B={1,4,3,5,6,2,8,9}.因此A的重新编号为A={1,2,3,4,5,6,7},B={1,4,6,3,0,0,5,7};故将LCS变成LIS,因为LIS可在O(NlogN)时间内解决,因此本题可以在O(NlogN)时间内解决。// File Name: 10635.cpp// Au 阅读全文
posted @ 2013-01-23 16:42 z.arbitrary 阅读(222) 评论(0) 推荐(0)
摘要: POJ 2-sat六题之一解题报告:http://blog.sina.com.cn/s/blog_64675f540100k13v.html题意:平面上,一个圆,圆的边上按顺时针放着n个点。现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接。给你的信息中,每个点最多只会连接的一条边。问能不能连接这m条边,使这些边都不相交。这题主要是了解把边看成是2-sat的变量。边的里边和外边对应变量的true和false;解题报告:题意可能刚开始不是很好理解,比如1 5连边,2,6连边,由于点是顺序排列的,一画图就可以发现,这两条边必须一个从圆外面连,一个从内部连,否则就会相交。 阅读全文
posted @ 2013-01-22 22:24 z.arbitrary 阅读(306) 评论(0) 推荐(0)
摘要: 照这书写的。。(┬_┬)这个题找bug找了半天原来是#define MAXN 2000+20不行。。怪我没看FQA。。哎。。然后改成#define MAXN 2020就行了这题是2-sat模型。。。虽然我也不知道为什么要这么做。但是好歹写了有个2-sat模版吧2-sat:有n个布尔变量xi,另有m个需要满足的条件,每个条件的形式都是“xi为真/假或者xj为真/假”。比如:“x1为真或者x2为假”。这里或者是指两个条件至少有一个是正确的,这样有三种组合满足。做法:我们将一个点拆成两个点,2i和2i+1,分别表示真或假对“xi为真或者xj为真”这样的条件,我们连一条有向边2i+1--->2j 阅读全文
posted @ 2013-01-22 14:48 z.arbitrary 阅读(380) 评论(0) 推荐(0)
摘要: 约瑟夫环问题变形问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。编号0-(n-1)是有意义的,因为要模n,所以用0-(n-1)更好操作我们知道第一个人(编号一定是(m-1) mod n) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m mod n的人开始):k k+1 k+2 ... n-2,n-1,0,1,2,... k-2并且从k开始报0。现在我们把他们的编号做一下转换:k --> 0k+1 --> 1k+2 --> 2......k-2 --> n-2变换后就完完全全成为了(n 阅读全文
posted @ 2013-01-19 23:58 z.arbitrary 阅读(329) 评论(0) 推荐(0)
摘要: 有向图强连通分量题意:要求添加尽量少的边使得新图强连通。先求强连通分量,再进行缩点形成新图,然后求新图入度为0的个数和出度为0的个数的最大值即是答案;View Code #include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <stack>#define MAXN 20000+50using namespace std;int n,m;vector<int>G[MAXN];int lowlink[MAXN],sccno[ 阅读全文
posted @ 2013-01-16 18:19 z.arbitrary 阅读(203) 评论(0) 推荐(0)
摘要: 边双连通分量这题的数据量比题目写的小,这题还需要判重,2个确定的点之间的任何边都算same path,唔,不知道为什么,很弱看不懂题目。。。。所以要先去重边,然后dfs求出桥,再dfs求出边双连通分量(只要不经过桥就行了)问加多少条边使得任意两点都有两条不同边的路,就是求一个双连通分量所以求出边双连通分量,然后缩点形成新图,新图上度数为1的节点(即叶节点)数目为ans(ans+1)/2 即为答案View Code #include <cstdio>#include <cstring>#include <iostream>#include <vector 阅读全文
posted @ 2013-01-15 23:54 z.arbitrary 阅读(287) 评论(0) 推荐(0)
摘要: 刘汝佳新书题意:求无向图的点双连通分量,当一个点双连通分量只有一个割顶时才需要安装太平井且任选一个非割顶安装太平井即可。View Code #include <cstdio>#include <iostream>#include <vector>#include <stack>#include <cstring>#include <map>using namespace std;#define MAXN 60000int n;vector<int> G[MAXN],bcc[MAXN];int pre[MAXN] 阅读全文
posted @ 2013-01-13 14:49 z.arbitrary 阅读(550) 评论(2) 推荐(0)
摘要: 刘汝佳新书题题意求是求不在任意一个简单奇圈的点的个数先求双连通分量,再用二分图判断是否是奇圈View Code #include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <stack>using namespace std;#define MAXN 1005int A[MAXN][MAXN];int n,m;struct Edge{ int u,v;};vector<int>G[MAXN],bcc[MAXN];int pr 阅读全文
posted @ 2013-01-10 00:08 z.arbitrary 阅读(318) 评论(0) 推荐(1)
摘要: 这题的算法好神!Orzz一个周长为10000的圆圈,一开始等距的安放着N个雕塑,现在想增加M个雕塑,使得雕塑之间还是等距,问坟墓最少移动的距离?#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#define F 10000using namespace std;int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ double ans=0; for(int i=1;i< 阅读全文
posted @ 2013-01-01 17:24 z.arbitrary 阅读(304) 评论(0) 推荐(0)