自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BootStar

Just For Dream

  • 博客(44)
  • 资源 (2)
  • 收藏
  • 关注

原创 POJ 1753: Flip Game

http://poj.org/problem?id=1753题目意思很简单,和POJ1222题一样,前面在POJ1222的解题报告中已经将思路写的很清楚,这里不再赘述。这个题是找出最短的翻转步骤。同样也是遍历解空间。不过需要我们完全遍历,并且分为翻成全白和全黑两种这里都要计算。程序如下:/*ID: csuchenanPROG: POJ 1753 Flip GameLANG: C++

2012-04-25 16:36:30 380

原创 POJ 1222 : EXTENDED LIGHTS OUT

http://poj.org/problem?id=1222点灯问题,用遍历搜索空间的方法解。正如题目中所提到的几点,按下的顺序无关,每个灯最多只需按下一次。假设最终的按下位置为press矩阵,那么如果press矩阵是寻找的答案,那么按照press的第一行矩阵对灯进行操作之后,此时在矩阵的第一行中:如果位置(1,j)上的灯是亮的,则要按下位置(2,j),即press[2][j] 一定取1;

2012-04-25 15:45:22 348

原创 POJ 2785:4 Values whose Sum is 0

http://poj.org/problem?id=2785这道题目意思很简单,但是数据量很庞大,就需要设计比较好的算法。方法一:利用二分搜索算法。根据题意,我们将数据分为左右两个部分,然后将左侧的两列之和加起来,然后排序,在对右侧的两列加起来,二分搜索相应的解的上下限。这里需要注意对一个数出现的上下界的寻找办法,代码要注意,也可以通过STL中的lower_bound与upperbound

2012-04-25 12:42:45 597

原创 POJ:2752Seek the Name, Seek the Fame

http://poj.org/problem?id=2752题目找出给定的字符串的字串使得前缀与后缀相等,用KMP解。思路很巧妙,充分利用了KMP算法的思想,即对于模式串的next[]数组进行求解的思想。我们知道对于模式串P,长度为lenp ,有next[lenp]为模式串p的前缀与后缀相等的长度,理由简单,next[lenp]保存的是以p[lenp]结尾的且与字符串开始的时候匹配的最大长度(

2012-04-23 22:23:09 295

原创 POJ:2406 Power Strings

http://poj.org/problem?id=2406题目意思很明确,确定一个a使得a^n=s,使得s最大,这个题目初看时,貌似需要找到最小的a,然后才能求出s,但这样肯定会超时。想到用KMP算法,将S当作模式串,对S进行一次自我匹配后,就可以找到了最小的a的长度了,其中先计算lena = lens - next[lens] ,然后判断lena是否能被lens 整除,如果能整除,则说明l

2012-04-23 20:45:15 373

原创 POJ3461:Oulipo

http://poj.org/problem?id=3461题目很简单,就是寻找给定的模式串在目标串中出现了多少次,采用KMP算法。代码如下:/*ID: csuchenanAlgorithm: KMPPROG: POJ 3461 OulipoLANG: C++*/#include#include#include#includeusing namespace std ;

2012-04-23 15:36:30 297

原创 POJ:3041Asteroids

http://poj.org/problem?id=3041题目意思很明确,求最少武器来消除所有的小行星。初看问题,就是求解最小点覆盖数,也即最大匹配数,但是直接建图肯定会超时,由于匈牙利算法的时间复杂度为O(n^3),n为10000的时候,肯定会超时,这里就以行与列作为点,有小行星的地方,则连一条线。这样就转化为求解最小点覆盖数。二分图的每一条边作为一个小行星,我们找最少的点,使得这些点覆盖

2012-04-23 01:16:17 314

原创 uva:348 - Optimal Array Multiplication Sequence

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=284矩阵乘法问题,区间dp。动规方程为:f[i][j] = min{ f[i][k] + f[k+1][j] + p[i] * q[k] * q[j] } (k>=i &&

2012-04-22 13:40:22 338

原创 uva:562 - Dividing coins

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=503题目意思很明确,将给定的物品分成两部分,使得这两部分的和的绝对值之差最小。出看题目,想分成每块硬币放入0号和1号盒子,的最小值,但是发现需要有很多的状态需要记录,随重叠,

2012-04-22 11:32:37 740

原创 POJ1273:Drainage Ditches

http://poj.org/problem?id=1273题意很清楚,典型的最大流求解问题,采用EK解(目前只会这个)。只不过这个题目的数据得注意重边的情况,开始的时候没考虑重边,被坑了,若干wrong之后,才想到这一可能性。代码如下:/*ID: csuchenanPROG: POJ1237LANG: C++*/#include#include#include#in

2012-04-21 23:09:47 290

原创 POJ2240:Arbitrage

http://poj.org/problem?id=2240套汇题目,运用bellman算法解。由于要从币种A出发回到币种A,故而需要多递推一次。程序如下:#include#include#includeusing namespace std ;const int maxn = 50 ;const int maxm = 1000 ;#define max(a , b)

2012-04-21 18:54:09 253

原创 uva10369 - Arctic Network

点击http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=116&page=show_problem&problem=1310题目很简单,直接用krusakl算法即可,然后找出第S大的数,S即为卫星的个数。开始的时候我将卫星之间可以直接通信这一条给忽略了,wrong了N久。后来才注意到这一点。

2012-04-21 18:38:58 321

原创 uva10048 - Audiophobia

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=116&page=show_problem&problem=989题意很简单,找一条路径使得,这条路上最大的噪声量最小,这题是floyd的变种,直接用Floyd算法即可。和之前的题目相同。不过这题最坑爹的是输出格式,在最后不能多输出空行

2012-04-21 11:30:57 378

原创 UVA:10034 - Freckles

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=116&page=show_problem&problem=975典型的求最小生成树的题目,采用kruskal算法即可,先存储所有的点,然后分别计算点与点之间的距离,并存储起来,在直接运用kruskal算法即可。唯一需要注意的是输出格式问题

2012-04-21 09:51:50 413

原创 USACO:Broken Necklace

http://ace.delos.com/usacoprob2?a=Y4t2tYgH7TP&S=beads这一题比较经典,虽然题意很简单就是从某个位置切断,然后向左右不断的搜索相同的珠子,但是解法却有很多,如单纯的暴力搜索,也有比较高效的解法,故而有必要好好对此题进行一个总结归纳。方法一:暴力搜索。这种方式下时间效率为O(n^2)。可以采用从某个点切断然后从这个点向两边扩展搜,由于是环形,

2012-04-19 13:54:12 359

原创 uva:10131 - Is Bigger Smarter?

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=1072简单dp,是最长上升子序列问题的变种。要注意样例,对于其输出结果,得到得先将输入的序列进行排序,然后再动规。由于要输出对应的序列号,所以这里我们就直接采用O(n^2)算法。

2012-04-17 20:43:12 399

原创 116 - Unidirectional TSP

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=52题目意思很明确,并且这一题的递归方程很好写,只不过需要注意的是对于字典序的理解。在更新路径的时候要不断的比较字典序,即要从头到尾的比较而不是仅仅比较前驱。代码如下:/*

2012-04-17 18:33:38 531

原创 POJ3468:A Simple Problem with Integers

http://poj.org/problem?id=3468           线段树的第二题,这题是关于区间元素的插入以及求和,用线段树在适合不过了。遵循线段树的解题一般情况,先创建线段树,然后不断的插入元素,然后根据题目要求,对元素进行修改以及查询。这里主要说一说修改操作和查询操作。这两个操作都采用Lazy办法,也就是在修改或者查询的时候,对于查询或者修改区间相同的时候,不必急于修改其子

2012-04-13 21:21:40 308

原创 POJ3264:Balanced Lineup

http://poj.org/problem?id=3264初次使用线段树解题,题目意思很清楚,查询区间[p ,q]中的最小数与最大数,然后输出二者之差。采用线段树解决,问题要简单的多,建线段树,然后插入,查询即可。在设计节点的时候根据题意除了要包含基本的元素外,还要包含该段元素中最小的,最大的。程序如下:#include#include#includeusing names

2012-04-13 15:34:47 302

原创 POJ3258:River Hopscotch

http://poj.org/problem?id=3258题目意思很清楚,就是移出m块石头使得每头牛跳跃的最短距离最大。开始的时候想用贪心算法来解,但是发现题目的贪心选择不明确,并且数据量很大,于是就放弃了。因为最近在学二分搜索,并且有这一题,所以就思考着用二分搜索来解决这道题目。以一数值为牛必须跳跃的最短距离(当作一个衡量标准),然后判断在该最短距离下,会移除多少石头,如果移除的石头数

2012-04-12 17:07:12 385

原创 POJ3273:Monthly Expense

POJ3273:Monthly Expense题目大意:给定n个数据,将这n个数据分成m组,使得每组数据值和尽可能的小,输出所有组中最大的和。解法很巧妙,开始的时候没想到用二分法解,想暴力枚举过。。后来看了别人的解题报告,就考虑率用二分法解。题目在选取元素的时候很巧妙,用着n个数据分为一组最大的值到n个数据之和,作为二分的对象,这样必然有序,然后是选取改变上下界的函数,这里采用给定一个分法的上

2012-04-11 21:57:09 340

原创 浅谈二分搜索

二分搜索算法在搜索以及ACM中是很常用的。二分搜索算法是分治算法的一个典型的应用。但是二分搜索算法的正确性确实我们必须注意的一个问题。下面就介绍下二分搜索算法:二分搜索算法的主要思想:对于一个已排序的元素序列,我们每次选取包含问题解的区间,然后求解其区间的中点,然后将中点元素的值与对应的键值进行比较,找出其对应的包含问题解的子区间。这样逐步将包含问题解的区间缩小,直至找到问题的解。例如:从

2012-04-11 18:15:06 638

原创 POJ1905:Expanding Rods

http://poj.org/problem?id=1905题目大意:一根棍子夹在两堵墙之间,加热之后会膨胀。求膨胀之后棍子中点距离水平的高度。利用勾股定理,二分求解。已知半径和弧度,假定所求高度为 m,棍子长度为 l,勾股定理可知圆半径为 (m * m + l * l /4)/(2*m)。利用半径对应求出的弧长的比较来判断二分区间。代码如下:#include #include

2012-04-11 16:19:41 301

原创 ZOJ1654:Place the Robots

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=654这个题目看题后会很直接以空白处作为顶点建图,这样问题转化为求最大独立集问题,当然我们可以进一步转化为二分图匹配问题,利用二分图的性质:最大顶点独立集个数= 顶点个数 —最小顶点覆盖,而最小顶点覆盖=最大匹配,这一点在前面的Boys And Girls的解题报告中已经使用了

2012-04-10 17:31:36 319

原创 POJ2253:Frogger

http://poj.org/problem?id=2253 这题与前面POJ2263(在我的前一篇解题报告中有)类似,都是关于Floyd解法的变种,这个需要注意的就是递推式如下:temp = max { map[i][k] , map[k][j]} , map[i][j] = min{temp , map[i][j]} 。map[i][j]表示的是从i到j的所有路径的最大距离的最小值

2012-04-10 14:54:01 322

原创 POJ2263:Heavy Cargo

http://poj.org/problem?id=2263题目是求一条能承载最重货物量的路径,只需求出最大的承载量。这题可以利用Floyd思想来解决,从i到j的路径中假设经过k,则该条路最少的承载量为min{ map[i][k] , map[k][j]},故对应的i到j的最大承载量为max{ map[i][j] , min{map[i][k] , map[k][i]}}。这样问题就可以解决了

2012-04-10 13:45:40 336

原创 POJ2570:Fiber Network

http://poj.org/problem?id=2570题目看似与Floyd无关,但是我们可以用Floyd算法的思想去解决。在这里我们将每一位小写字母转化成对应的二进制位,刚好需要一个整型数据来保存结果,通过逻辑与或操作来完成对应位的操作。开始交的时候用g++然后用printf()输出,结果一直超时,改用putchar()后就过了,然后用将语言改为c++ 结果用printf()输出也过了,

2012-04-10 00:11:21 313

原创 POJ3268:Silver Cow Party

http://poj.org/problem?id=3268这题求最短时间,直接用两次bellman-ford的队列优化算法spfa即可,需要先算从x回到起点的最短时间,然后再算往程的时间,因为需要对图进行对称翻转。看源代码:#include #include #include #include using namespace std ; #define INF 10000

2012-04-09 20:41:58 252

原创 POJ1860:Currency Exchange

http://poj.org/problem?id=1860题目类似于套汇,不过多加了一个条件,就是每次转换的时候有一定的手续费。直接用bellman-ford算法,注意数据是double类型的,所以初始化的时候,还是使用循环比较好,直接用memset函数会出错。再有就是对于更新的次数要在10000左右,开始的时候没让循环那么多次,结果wrong,改成10000之后就AC了。代码如下:

2012-04-09 19:26:08 296

原创 POJ3692:Kindergarten

http://poj.org/problem?id=3692题目大意:有一群男孩,他们互相认识,有一群女孩,她们也互相认识,这些男孩中有以些认识女孩中的某些人,现在找出一群孩子使得他们都认识,并且数目最多。有题目给定的条件,可以很容易的将其判定为二分图的匹配,但是要从其中找出都互相认识的,并且使得数目最大,比较困难,我们可以逆向思考,找出一个集合使得其中的人数最多,并且集合中的所有人都

2012-04-09 14:54:49 376

原创 zoj1137:Girls and Boys

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=137这题是寻找最大的集合,使得集合中的所有元素都没有关系。用二分图的最大匹配来计算,然后在减去最大的匹配数,就可以得到最大个数。但是如何将集合中元素进行二分,是个比较纠结的事情,开始想以男女来将顶点分为两个集合,但是输入的数据是比较难判断男女关系的。最后上网搜题解的时候,看到

2012-04-08 23:38:46 755

原创 [NOIP1999]邮票面值设计

题目链接:http://www.rqnoj.cn/Problem_112.html题目题意很简单,想法也很简单,直接深搜加枚举,不过鉴于数据,得适当的优化下。在求解当一个数被加入的时候,要找出相应的产生的最大面值,开始的时候一直没思路,后来想到可以用动规来枚举,这样这个题目就OK了。用动规的时候求解对于给定的一个面值如何用最少的票凑出来,这样我们就可以很容易的计算出上限。如果直接枚举的话,状态

2012-04-07 00:03:48 1735

原创 NOI2006:金明的预算方案

题目链接:http://www.rqnoj.cn/Status_Show.asp?SID=744089这题纠结了两三天,主要是主件与附件之间的关系,然后选择问题让人纠结。我们可以将主件与对应的附件进行分组,对每个分组,我们有如下几种选择方式,都不选,只选主件,选主件与一个附件,选主件与多个附件,根据题意,每个分组最多有四种情况,这里可以直接枚举,这几种选择是互不相容的,这样就转化为了分组背包问

2012-04-06 15:18:57 2792

原创 hduoj3790:最短路径问题

链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790这一题是一道双权值的问题,并且权值有主要与次要之分,这里我们仍采用dijkstra算法,不过在建图的时候我们需要多保存一条信息,就是第二个权值,在表示源点到目标点的代价的时候我们用一个二维数组来保存。然后更新的时候每个点仍只访问一次,可以保证最后结果的正确性,这里就不说其证明了(证明很简单)

2012-04-04 22:43:10 310

原创 hduoj2544:最短路

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544权值为正的单源最短路径问题,用dijkstra+priority_queue优化,当然也可以直接使用dijkstra。#include #include #include #include using namespace std;#define INF 1000000c

2012-04-04 21:36:43 368

原创 poj1308:Is It A Tree?

题目链接:http://poj.org/problem?id=1308判断给定的序列是否为能组成树判断条件如下:1.空树是树2.树中无环路存在3除根节点外,每个节点的入度为04.只能存在一个根节点我第二次用并查集写的时候,这题在poj上可以AC却在hduoj上AC不了,各种测试都通过 ,就是不AC,费了很长时间。郁闷!在两个oj上都能AC的代码如下:#include

2012-04-04 20:25:25 358

原创 hduoj1272:小希的迷宫

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272题目是判断给定的图是否存在环与孤立的点。使用并查集即可判断,如果存在环路,则必有一条边使得当这条边的两端的顶点的根节点属于同一个集合,因而在合并操作的时候判断这条边的两个节点的根节点是否属于同一个集合。孤立的点,则会出现,合并的最后仍至少有两个点的根节点为自身。poj的1308和此题类似代

2012-04-04 17:16:25 322

原创 hduoj1213:How Many Tables

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213互相认识的人在安排在同一桌子上,不认识的人,安排在不同的桌子上。可以使用并查集来解决,将这些人归为若干个集合,每个集合中都是相互认识的,每个集合可以选一个代表,即作为该集合中所有人的父节点。代码如下:#include #include #include using namespac

2012-04-04 14:19:53 335

原创 [NOIP2001]数的划分

http://www.rqnoj.cn/Problem_612.html这道题也是关于整数的划分,与以往不同的是,这个题要求必须将整数拆分成k部分,第一种想法可能需要搜索,但是搜索的速度太慢了,当n=200,k=6的时候,速度就慢的不行了。通过优化,可以将效率提高。题目中举的例子提醒我们,每个数可以被使用多次,我们将结果中的数字按照递增的顺序进行排列,再来看这问题,如果忽略需要拆成k个数,这不

2012-04-04 09:48:24 687

原创 hduoj2063:过山车

http://acm.hdu.edu.cn/showproblem.php?pid=2063一道典型的二分图的匹配。将女生与男生区分开作为两个不同的集合,如果女生a愿意和男生b一起,那么a ,b之间连线。然后对女生中的每一个进行扩展,找出最多的边。注意初始化等细节即可。代码如下:#include #include #include using namespace std;

2012-04-04 01:34:11 489

AC自动机pdf

关于AC自动机的pdf文档,很清楚的讲解了AC自动机算法及应用

2012-08-07

程序设计导引及在线实践

介绍C++语言,然后介绍了常见的一些基本的算法以及一些POJ例题,为ACM入门者以及编程语言初学者提供帮助。

2012-04-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除