- 博客(49)
- 资源 (1)
- 收藏
- 关注
原创 USACO 4.1 Fence Loops 最小环
http://ace.delos.com/usacoprob2?a=b8o6p9MDlbr&S=fence6题意:给你一个有N个点的图,求图中的最小环。N思路:算法很简单,就是一个O(N^3)的Floyd最小环。这道题目恶心的地方是给你的图的信息是图中一些边与边之间依附的信息,这样就给建图带来了麻烦。没有想到好的方法,用了一种比较笨的方法,先将每条线段看做一条独立的边(有两个独立的顶点),
2012-04-26 23:19:43 665
原创 USACO 4.1 Cryptcowgraphy dfs+剪枝
http://ace.delos.com/usacoprob2?a=2SgXjKYaF1c&S=cryptcow一道bt的剪枝题,做了一下午,最后还是看了别人的解题报告过的,才菜了。。 。剪枝1:C,O,W出现的次数要相同,除了C,O,W之外的其他字符串的个数和类型和目标串相同。剪枝2:通过ELFHash对串进行判重.( HASHSIZE可以大点)剪枝3:对于任意串, 任意相邻的'
2012-04-26 16:33:21 639
原创 Codeforces Round #117 (Div. 2) C. Optimal Sum
http://www.codeforces.com/contest/182/problem/C题意:给你一组有N个数的数列,给你最多K次将其中的一个数取反 的机会,即原来是a的数,经过这种操作之后,这个数会变成-a。问在最多允许k次这种操作的情况下,最大的连续len个数的sum是多少。N思路:这是一道3000分的题,比赛的时候没做出来,是比了赛之后看别人的代码之后才想明白的。题意很容易
2012-04-25 23:41:30 845 2
原创 USACO 3.4 A Game
http://ace.delos.com/usacoprob2?a=5yeP9Cco705&S=game1题意:有一个两个人的游戏,游戏的规则是这样的:给你一个有N个数的数列,每次有一个选择这样数列的一端将该数删除,所得的分数就是该是的值,游戏从P1开始,问假设两个人都采用最优策略,最后两个人的得分是多少。思路:博弈问题,可以用动态规划解决。状态为:dp[i][j][0] : 表示将[ i
2012-04-24 15:28:27 381
原创 hdu 3592 World Exhibition 差分约束
http://acm.hdu.edu.cn/showproblem.php?pid=3592题意:有N个人按照1-N 的顺序排成一排,给你X个关于他们位置的关系,如:a, b ,c,则说明编号为a的人在标号为b 的人的前面,且两人最多相隔c距离,再给你Y给位置关系,给出的是a和b两个人至少相距c,问1号人和N号人最远相距多少。如果不存在这样的排序,则输出-1 ,如果1和N可以相距任意的距离,则
2012-04-21 17:28:25 643
原创 hdu 1384 Intervals 差分约束
http://acm.hdu.edu.cn/showproblem.php?pid=1384题意:给定n个区间,每个区间给定一个常数ci,求一个具有最少元素的整数集,要求每个区间中都有至少ci个整数和集合中的元素相同。思路:经典的差分约束。我们用count[i]表示,从0到i的区间内共有多少个元素被选在集合内,则对于每个给出的区间条件:[ i, j ] ci有:count[j] - cou
2012-04-21 15:07:41 1308
原创 hdu 3666 THE MATRIX PROBLEM 差分约束
http://acm.hdu.edu.cn/showproblem.php?pid=3666题意:给你一个N*M的矩阵,求两列数a1,a2,a3...an 和 b1,b2.....bm使得对矩阵中的每个数进行下面的操作之后的值在[L,U]之间,操作为:a[i] * m[i][j] / b[j]。 N,M思路:差分约束。由题意可知,对于矩阵中的每个元素要满足的条件是:L a[i] * m[
2012-04-21 14:04:58 1168 4
原创 USACO 3.1 Humble Numbers
http://ace.delos.com/usacoprob2?a=SCwjbv7N2zR&S=humble题意:给你N个质数,求由这些质数组成的,第K大的数是多少。 N思路:假设我们现在要求的是第k个数,可以肯定的是这个数一定是由前面的某个数乘以一个给定的质数中的一个得到的,这样我们就可以枚举所要求的这个数是由哪个质数乘以前面的数得到的,为了加快搜索, 我们用一个pos数组,存放第i个质
2012-04-20 16:42:39 494
原创 poj 1204 Word Puzzles AC自动机
http://poj.org/problem?id=1204题意:给你一个N*M的由大写字符组成的矩阵,再给你M个长度不超过1000的字符串,要你确定这些字符串在大矩阵中的开始位置和方向。思路:AC自动机,对匹配串建立Trie树和失败指针,然后就是进行匹配了,所不同的是这里给你模式串不一维的,因此匹配的时候会有一点不同,一开始错误地以为需要对每个点进行8个方向的枚举匹配,这样的复杂度就会达
2012-04-13 16:08:03 505
原创 hdu 2896 病毒侵袭 AC自动机
http://acm.hdu.edu.cn/showproblem.php?pid=2896题意:给你N个匹配串和M个模式串, 问你每个模式串中,N个匹配串有哪些出现过。思路:AC自动机,和hdu2222思路其实是一样的,只不过这里就是需要增加一个域,来标记以该结点结束的串#include#includeconst int MAXN = 200*500+10 ;int N , M
2012-04-13 11:31:25 380
转载 hdu 2222 Keywords Search AC自动机详解
感谢这篇博文对我学习AC自动机的帮助,让我对AC自动机有了一定的了解, 以下的内容转自这篇博客:http://www.cppblog.com/mythit/archive/2011/12/01/80633.html 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n
2012-04-13 10:58:18 492
原创 HNU 11704 Baidu Post Bar
http://acm.hnu.cn/online/?action=problem&type=show&id=11704&courseid=0题意:给你一堆语法规则,再给你一个表达式,问你这个表达式是否合法。思路:DFA,构造一个有限状态自动机,然后进行状态转移。代码:#include#include#includeconst int MAXN = 10010 ;int N
2012-04-12 22:12:12 456
原创 CSU 表达式 DFA
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1182题意:给你一个表达式, 问该表达式是否合法思路:DFA 。代码:/*有限状态自动机 */#include#include#define S 0 //初始状态 #define NUM 1 //以数字结尾的状态 #define
2012-04-12 19:37:49 396
原创 POJ 3332 Parsing Real Numbers
http://poj.org/problem?id=3332题意:给你一个real number , 要求判断是否合法。思路:第一题DFA。所谓的DFA无非就是一种在各个有限的状态之间转化的图,经过一系列的变化之后问最后一种状态是否合法。代码:/*par= 0: 初始状态 1: 以 + 或者 - 号 2: 以 .结尾 3: 以数字结尾, 没出现过小数点 4
2012-04-12 16:38:52 1311
原创 hdu 2852 KiKi's K-Number 二分+树状数组
http://acm.hdu.edu.cn/showproblem.php?pid=2852题意:给出三种操作, 0 在容器中插入一个数。 1 在容器中删除一个数。 2 求出容器中大于a的第k大元素。思路:二分+树状数组树状数组的特点就是对点更新,成段求和,而且常数非常小。原始的树状数组只有两种操作,在某点插入一个数 和 求1到i的所有数的和。这道
2012-04-12 13:50:21 562
原创 POJ 1020 Anniversary Cake dfs
http://poj.org/problem?id=1020题意:给定一块size*size 的生日蛋糕,并给出一些人的需要的蛋糕大小,问是否能将蛋糕完全切分给所有人而没有一点浪费。思路:dfs搜索,思路很好。蛋糕的摆放顺序从上至下,每次都寻找所有列中摆放蛋糕最少的一列摆放蛋糕,这样搜索就可以过了。代码:#include#includeint T ,size ,piece ;
2012-04-12 11:18:58 743
原创 hdu 2874 Connections between cities LCA
http://acm.hdu.edu.cn/showproblem.php?pid=2874题意:给定有N个结点的森林和Q次询问,求任意给定的两个结点之间的距离。 N算法:LCA离线算法。所不同的是,这题并不是给你一颗树,而是一个森林,因此还需要用并查集将一颗树上的结点放到同一个集合中去,然后对每棵树用Tarjin算法求一次LCA,就可以得出结果了。代码:/*LCA tarjin
2012-04-11 23:41:46 530
原创 POJ 1984 Distance Queries LCA
http://poj.org/problem?id=1986题意:给你一颗树,任意给定Q次询问(a,b) ,询问a 和b两个结点之间的距离。N思路:LCA,因为是一颗树,我们可以任意选取一个结点作为树的根,然后用一次dfs,在O(E)的时间内求出所有点到根的距离,然后用LCA的Tarjin离线算法求出Q次询问的最近公共祖先,最后dis[i][j] = dis[i] + dis[j] - d
2012-04-11 18:52:48 551
原创 POJ 1470 Closest Common Ancestors LCA离线Tarjin算法
http://poj.org/problem?id=1470题意:给定一颗有根树,并且有Q次询问,格式是(u,v),求任意一次询问的两个结点的最近公共祖先。算法:裸的LCA ,这是LCA的第一题,首先说下LCA离线Tarjin算法,其实质就是dfs +并查集。首先将所有的查询都先记录下面(因为是离线算法),然后就是从根结点对树进行一次dfs,复杂度为O(E) ,注意树用邻接矩阵存储。当
2012-04-11 16:34:26 566
原创 hdu 3473 Minimum Sum 划分树
http://acm.hdu.edu.cn/showproblem.php?pid=3473题意:给定一个数组,有Q次的询问,每次询问的格式为(l,r),表示寻找一个x,使得的值最小。N思路:本题根据N,Q的数据规模就可以看出,我们需要寻找一种查询时间复杂度为O(logN)的算法,否则肯定会超时。首先可以简单地证明得出这个x的值一定是区间(l,r)的中位数的取值,这个证明也很容易证明,这里
2012-04-11 09:09:22 799
原创 POJ 2104 K-th Number 划分树
http://poj.org/problem?id=2104题意:给定N个数的数组,求Q次询问的区间第K小的数。思路:用划分树求解。所谓的划分树,说白了就是线段树的一种扩展,在划分树中,树的每个结点还是表示一个区间,假设是(l,r),只不过和线段树不同的是划分树对每个结点还维护一个数组,数组的长度为区间的长度(即:(r-l+1))。然后我们就是对区间进行划分,划分的依据就是找到一种“基准元
2012-04-10 22:02:23 947
原创 hdu 3976 Electric resistance 高斯消元
http://acm.hdu.edu.cn/showproblem.php?pid=3976题意:给定有N个结点的电路图,编号为1-N,求1号和N号结点之间的等效电阻。思路:由基尔霍夫定理对每个结点列电流定理(用每个结点的电压),得到N个方程组和N个变量,求解方程组即可,因此就是高斯消元。代码:#include#include#include#includeconst do
2012-04-09 23:23:28 1209
原创 hdu 4200 Bad Wiring 高斯消元
http://acm.hdu.edu.cn/showproblem.php?pid=4200思路:经典的开关问题,高斯消元+枚举自由变量代码:/*高斯消元+枚举自由变量 */ #include#include#includeusing namespace std;int T , N ,M ;int num[110] ;int a[110][110] ;int row
2012-04-09 19:48:52 959
转载 高斯消元法(Gauss Elimination) 分析 & 题解 & 模板
转载自:http://hi.baidu.com/czyuan_acm/blog/item/ebf41f8fdc0e1ee6f01f36e9.html高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组。所以我们可以用初等行变换把增广矩阵转
2012-04-09 00:06:40 939
原创 POJ 1222 EXTENDED LIGHTS OUT 高斯消元
http://poj.org/problem?id=1222题意:给定一个5*6的0-1矩阵, 每个元素有一个值,是0或是1。press没个点的时候,其周围的4个点和中间的那个点的状态都将发生变化,即0->1 , 1->0。在保证有解的情况下求一种press ,使得所有的元素的状态都是0。思路:5*6的矩阵,一共30个元素,其实这题只要枚举第一行的press状态,接着往下推,就可以得出结果
2012-04-08 19:17:39 574
原创 POJ 3207 Ikki's Story IV - Panda's Trick 2-sat
http://poj.org/problem?id=3207题意:平面上,一个圆,圆的边上按顺时针放着n个点。现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接。给你的信息中,每个点最多只会连接的一条边。问能不能连接这m条边,使这些边都不相交。思路:对于每条Link,要么在圆外,要么在圆内,且不可同时满足,只能两者取一,判断这M条Link是否合法,也就是M条Li
2012-04-08 13:20:20 396
原创 POJ 1734 Sightseeing trip Floyd求最小环
http://poj.org/problem?id=1734题意:给定一个N个点的无向图,求其中的最小的环。思路:朴素的求法是:一次枚举每一条边(假设为e(i,j)),删除它,并求利用剩下结点(i,j)之间的最短路,该环就是dis(i,j) + e(i,j)。这样就需要依次枚举每条边,然后求一次最短路,时间复杂度为:O(N*N*M), 在N和M的数据规模较大时就会超时。 有
2012-04-08 09:42:35 1234
原创 ZOJ 1576 Marriage is Stable 稳定婚姻问题
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1576稳定婚姻是组合数学里面的一个问题。 问题大概是这样:有一个社团里有n个女生和n个男生,每位女生按照她的偏爱程度将男生排序,同时每位男生也按照自己的偏爱程度将女生排序。然后将这n个女生和n个男生配成完备婚姻。如果存在两位女生A和B,两位男
2012-04-07 22:05:12 1655
原创 POJ 1679 The Unique MST 次小生成树Prim
http://poj.org/problem?id=1679题意:给定一个图, 求最小生成树,若最小生成树唯一则输出最小生成树的代价,否则输出“Not Unique!” 。思路:先求出最小生成树,然后求次小生成树,判断次小生成树和最小生成树的代价是否相等。以下说下用Prim求次小生成树的想法:算法1、step 1. 先用prim求出最小生成树T.
2012-04-07 19:49:06 639
原创 POJ 2449 Remmarguts' Date Dij +A*
http://poj.org/problem?id=2449题意:求有N个点,M条边的第K短路。 N100000 , K思路:第K短路。裸的第K短路题。先说第一种思路:Dijkstra变形,将原来是一维的Dijkstra中的dis[ ]数组变成二维的dis[ i ][ j ],表示结点i 的第j短路。这样就可以由Dij的过程求出最终节点的K短路了。但是时间复杂度确不尽如人意,时间复杂度
2012-04-07 17:36:24 428
原创 POJ 3522 Slim Span 并查集
http://poj.org/problem?id=3522题意:给定一个含有N个结点的图,求这样一种生成树,该生成树中的最大边和最小边的权值之差最小。N思路:由题意可知, 边的条数M的范围为:M代码:#include#include#includeusing namespace std;#define MIN(a,b) (a)>(b)?(b):(a)const int
2012-04-07 10:53:42 703
原创 hdu 3619 Heroes of Might and Magic 二维最短路
http://acm.hdu.edu.cn/showproblem.php?pid=3619题意:给一个N*M的迷宫,迷宫有一个起点和一个终点,分别用S和T表示。迷宫中还有"#":障碍物,不能走; "."可以走,而且不费代价; “i”,其中i是大于1,小于9的数字,可以走,但是要费一定的代代价,所花的代价就是数字i的值。;"A、B、C、D、E":其中的一种,表示该位置放置了一把锁,需要钥匙才能
2012-04-07 09:53:19 993
原创 hdu 2433 Travel 最短路+预处理
http://acm.hdu.edu.cn/showproblem.php?pid=2433题意:给定一个有N个顶点和M条边的无向图,图的每条边的权重都为1 ,分别求删除各条边的任意两个点之间的最短距离的和。 N思路:暴力的作法,分别枚举每条边,并删除,因为每条边的权重都为1 ,可以用一次bfs在O(M)的时候内求出单源最短路径,注意这里的图必须要用邻接矩阵存储,要不然时间复杂度会大于O(
2012-04-06 17:43:47 1562 1
原创 hdu 2363 Cycling Dijkstra最短路
http://acm.hdu.edu.cn/showproblem.php?pid=2363思路:思路其实是和hdu1598类似,先对100个点进行排序,然后枚举最大高度最小高度, 时间复杂度为O(N^2),然后对于每个枚举的最高最低点,对100个点进行筛选,高度在这两者之间的点标记为合法点,然后就是对标记了的结点进行一个Dij, 复杂度为:O(N^2),可以用优先队列优化到O(N*logN)
2012-04-06 14:43:19 579
原创 hdu 1598 find the most comfortable road 并查集+贪心
http://acm.hdu.edu.cn/showproblem.php?pid=1598题意:给定有向图和起点和终点,求从起点到终点的路径中,权重最大和最小的边的最小差。思路:很好的一道题目。一开始看到图的点数最多为200个的时候想到可以用floyd做,但是后来就发现其实最小差并没有最优子问题的性质,也就是说用dis[i][j]表示i和j之间的最小差,在dis[i][j]取到最优的时候
2012-04-06 13:09:44 568
原创 POJ 1190 生日蛋糕 搜索dfs
http://poj.org/problem?id=1190经典的搜索, 题目因为比较复杂就不形容了,这里说下剪枝的技巧:剪枝1 :在第i层的时,若i+1 -- n 层取最小, 总体积大于N ,则剪枝 ;剪枝2 :在第i层的时,若i+1 -- n 层取最小, 总表面积大于ans ,则剪枝 ;剪枝3 : 因为前i层的体积为sumv,那么剩余的m-i层的体积满足:n-sumv=(h[
2012-04-05 22:30:26 783
原创 hdu 1850 Being a Good Boy in Spring Festival Nim博弈
http://acm.hdu.edu.cn/showproblem.php?pid=1850题意:有M堆牌,两个人进行游戏, 每次都可以选择任意一堆牌,并从中取出任意张的牌(至少一张),最后取牌的人为赢者,问先手能赢的人第一次共有多少种不同的取法。思路:Nim博弈。首先由Nim博弈可知,任何的一个必败态为:a1^a2^a3...^an = 0,现在给我们一个局面,若为必败态,则没有一种取法
2012-04-05 16:42:39 920
原创 hdu 2167 Pebbles 状态dp
http://acm.hdu.edu.cn/showproblem.php?pid=2167和POJ 1185炮兵阵地类似, 做法也类似,这里不再详细叙述。有一点需要注意就是要注意输入的格式,很蛋疼。。代码:#include#include#define MAX(a,b) (a) > (b) ? (a) : (b) int N ;int num[16][16] ;char c
2012-04-04 21:59:09 653
原创 POJ 炮兵阵地 1185 状态压缩dp
http://poj.org/problem?id=1185题意:给定一个N*M 的矩形,其中包括了山地(“H”)和平原(“P”),现在要求在平原上布置一些炮兵据点,每个平原上最多可以布置1个炮兵据点,而且每个炮兵据点可以攻击其周围上下左右2个范围内的据点,为了不让炮兵据点相互攻击,求最多能布置多少个炮兵据点。N思路:经典状态压缩dp。观察题目之后发现,题目给定的N和M的范围相差较大,并且
2012-04-04 20:21:16 492
原创 POJ 2411 Mondriaan's Dream 状态压缩dp
http://poj.org/problem?id=2411题意:给定一个N*M的矩形区域,用1*2的小矩形将其填满,问一共有多少种填法。1思路:状态压缩dp 。用dp[i][j]表示将前i-1行正好完全填满,i行状态为j时的种数,状态转移方程为:dp[i][j] = sum{dp[i-1][pre]},其中pre状态可以转化为j状态。在已知pre求j就的时候,我们可以用一次dfs来搜索出
2012-04-04 12:29:11 441
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人