自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AC_Gibson的专栏

while(alive) ACing;

  • 博客(29)
  • 收藏
  • 关注

原创 POJ1062 昂贵的聘礼 Dijkstra算法

分析:这道题的难点在于每一条路径上都要满足等级限制,即如果等级限制为1,你和等级为3的人交换之后再和等级为2的人交换,那么你将不能再和等级为4的人交换了,因为4-2=2>1;同理你要是先和等级为4的人交换了,那么就不能和等级为2的人交换了。弄清楚了这点就没什么大问题了。实现代码如下:#include #include #include using namespace std;

2015-03-31 21:41:56 549

原创 POJ1860 Currency Exchange 反向bellman-ford

题目大意:在一个城市中存在n中货币,编号1到n,货币之间可以进行兑换,两种货币之间的兑换率为r,兑换时的手续费为c,这就意味着,假如你有100美元想要兑换成卢布,美元和卢布之间的兑换率为29.75,手续费为0.39的话,你能得到(100-0.39)*29.75=2963.3975卢布。现在已知n种货币和m中货币之间的兑换关系,每个兑换关系包括:可以相互兑换的两种货币a和b,以及货币a对b的兑换率r

2015-03-31 16:25:54 539

原创 POJ3259 Wormholes 最短路判负环

题目大意:FJ有n块农场,编号为1到n,这n块农场由m条道路和w个虫洞连接,没条道路是双向的,权值为t1,表示经过每条道路需要花费t1个时间单位,每个虫洞是单向的,权值为t2,经过每个虫洞可以让你回到t2个时间单位之前(说白了就是时光倒流);现在问你,FJ想从1号农场开始,经过若干农场后,在其出发之前的某一时刻回到1号农场。现在问你能否实现。分析:我们把虫洞上的权值看成负的,这

2015-03-29 18:09:14 527

原创 单源最短路径:bellman-ford算法和SPFA算法

前面讲了单源最短路径的Dijkstra算法和任意两点间最短路径的Floyd算法,今天我们来看一下求单源最短路径的另外两种常用的算法:bellman-ford算法和SPFA算法。至于为什么要把这两个放在一起呢,比较SPFA算法是对bellman-ford算法的改进和优化。        我们先来看一下bellman-ford算法:其实bellman-ford算法和Dijkstra算法是有相似之处

2015-03-29 17:22:16 1027

原创 POJ2996 Help Me with the Game 模拟题

题目大意:模拟出一个国际象棋的棋盘,给出你一个8×8的棋盘(行坐标由左到右为a到h,列坐标由上到下为8到1),和棋盘上的棋子,棋子有黑白两方,棋子有K,Q,R,B,N,和P 6种(但不一定全都有),让你分别找出棋盘上的黑白棋子的种类和坐标。分析:模拟题,叙述很复杂,题其实很简单,就是个输入输出之间的转换。因为棋盘上每一点其实是有3个点构成的,为了方便找坐标,这里我用0到32分别表示每一

2015-03-24 19:22:25 443

原创 POJ1573 Robot Motion 模拟题

题目大意:一个机器人进入一个矩形阵列中,矩形中每一点都标有下一步移动的方向(向东南西北之中的一个方向走),问你机器人能否走出该矩形阵列。如果能,输出在矩形中一共走了多少步,如果走不出,找出循环节的大小和机器人从进入矩形到走到循环节之间的距离。实现代码如下:#include #include #include using namespace std;int n,m,start

2015-03-24 13:32:56 644

原创 POJ2632 Crashing Robots 模拟题

题目大意:在一个a×b的仓库里有n个机器人,编号为1到n。现在给出每一个机器人的坐标和它所面朝的方向,以及m条指令,每条指令由三部分组成:整数num代表该条指令调用的机器人的编号;字符act表示操作:其中L表示原地向左转90°,R表示原地向右转90°,F表示向前走一步;整数rep表示执行该条指令的次数。已知,当两个机器人坐标相同时他们会相撞,某一个机器人走出仓库也会撞到墙,问你能否安全执行这m条指

2015-03-23 13:10:10 1174

原创 POJ1068 Parencodings 模拟题

题目大意:一个括号字符数组S,可以用两个整数数组P和W来描述,其中数组P中的元素Pi定义为:第i个右括号前面有Pi个左括号;数组W中的元素Wi定义为,第i个右括号和其配对的左括号之间所包含的完整的括号的对数。现在给你P数组,让你求出该字符数组S所对应的W数组。分析:我们可以由P数组先求出S数组,再由S数组找出W数组会更容易些。至于怎么由P数组找出S呢,我们用0和1分别表示左括号

2015-03-22 13:12:54 548

原创 POJ2586 Y2K Accounting Bug 贪心

题目大意我还是在网上搜的=_=!!!   搜了才发现,原来我不是一个人在战斗,有这么多读不懂题的陪伴我的少年们(感动的都哭了)。好了废话不说了,接下来我们看一下这道题吧:题目大意:MS公司由于某种原因导致公司账务数据丢失,已知该公司每个月的盈亏规则:如果盈利,则盈利值恒为s;如果亏损,则亏损值恒为d;又知道MS公司一年中每连续的5个月的总业绩总是亏损的,现在告诉你s和d的值,问你MS公司在一年

2015-03-20 13:31:24 612

原创 POJ2109 Power of Cryptography 二分

题目大意:给你两个整数n和p(1101 ),让你找出一个整数k,使n^k=p。分析:有两种思路:(1)看一下就可以知道,p的范围是可以用double装下的。然后我们都知道pow函数可以计算一个数的n次方,那么开平方就是计算出一个数的1/n次方了。实现代码:#include #include #include using namespace std;int mai

2015-03-19 13:11:39 526

原创 POJ1328 Radar Installation 贪心

题目大意:海中有n个岛屿,现在想要在海岸线上装设雷达来探测这些岛屿(海岸线相当于x轴,岛屿都在x轴的上方),雷达的探测范围是一个半径为d的圆,已知n个岛屿的坐标,问你最少需要多少雷达才能探测到全部岛屿;如果不能探测到全部岛屿,输出“ -1 ”。分析:        显而易见,如果输入的岛屿的y坐标存在大于雷达探测范围的值,那么我们就可以直接判断出不可能探测到所有岛屿了(因为雷达始终

2015-03-18 15:19:47 579

原创 POJ2251 Dungeon Master 三维BFS

题目大意:在一个三维迷宫中,问你从起点到终点的最小步数。分析:和HDU1253差不多,简单的三维BFS。实现代码:#include #include #include using namespace std;int dir[6][3]={{1,0,0},{0,1,0},{0,0,1},{-1,0,0},{0,-1,0},{0,0,-1}};int map[55][55][55

2015-03-17 21:24:48 540

原创 POJ2488 A Knight's Journey DFS

题目大意:一个p×q的棋盘,问你一个骑士(走法相当于中国象棋中的马)能否遍历棋盘上的每一点?如果可以,输出字典序最小的一组路径,否则输出“impossible”。分析:典型的骑士周游问题,直接DFS就行,注意一下方向数组的定义就行,因为要按字典序输出路径,我们可以按字典序遍历,这样,第一次成功的遍历就是答案了。实现代码如下:#include #include #include u

2015-03-17 20:46:29 537

原创 POJ2965 The Pilots Brothers' refrigerator(枚举+思维题)

题目大意:给出一个4×4的矩形,矩形上的“ + ”表示关闭状态,“ - ”表示打开状态,可以改变任意一点(i,j)的状态,改变该点状态的同时,第i行和第j列上的元素的状态也随之改变,问你事所有点都变成打开状态所需的最少翻转次数,同时输出要改变状态的点的坐标(坐标从1开始)。分析:这题和POJ1753有点相似,但比1753更有思维性。首先我们先来看一下,对于矩形中的某点(i,j),如果我们改变这

2015-03-17 18:39:02 498

原创 POJ3411 Paid Roads DFS

题目大意:有n个城市和m条道路(城市编号为1到n),从a城市经过c城市到达b城市(这里的a和c可以是同一个城市)的过路费有两种:(1)如果c城市已经走过,那么路费为p;(2)c城市没有走到过时路费为r;现在给出m条道路的信息,让你求出从城市1到城市n所需的最少路费。分析:乍一看这倒题像是图论中的最短路问题,可是仔细想想并不是那回事。题中并没有说哪两个城市之间可达,只是说了从a城市经过c城市到达

2015-03-17 12:29:29 614

原创 POJ3083 Children of the Candy Corn BFS+DFS

题目大意:给出一个n*m的迷宫和起点S以及终点E,让你找出一下三种迷宫求解结果:(1)左转优先搜索;(2)右转优先搜索;(3)迷宫最短路线;分析:前两者可以借助DFS来完成,对于最短路线,就只能用BFS了。我们首先来考虑一下怎么实现左转优先,对于下图来说,最初的方向由起点S确定,而下一步的方向则由前一步的方向决定。例如 左边优先搜索:当前位置的方向指向 1(向左),(这同时说明

2015-03-16 21:47:11 429

原创 POJ1753 Flip Game DFS+枚举

题目大意:有一个4×4的棋盘,棋盘上每一点都有黑白两面,每次可以翻转任意一点,在翻转某一点时,该点上下左右的4个临近点同时也会被翻转,现在问你要使棋盘上所有点的颜色统一所需要的最小翻转次数。分析:其实这道题是典型的高斯消元,不过我是用DFS来做的。首先我们知道,对于棋盘上任意一点,翻转偶数次是没有意义的,翻转奇数次和翻转一次是一样的,这就意味着,最大的翻转次数也不会超过4×4=16次,这样

2015-03-16 19:23:55 958

原创 HDU1372 Knight Moves BFS

题目大意:在一张8×8的国际象棋棋盘上(其中纵坐标用a-h表示,横坐标用1-8表示),给你一枚骑士的起点坐标和要到达的终点坐标,让你求出骑士要走的最小步数。分析:其实这道题的难点就在于很多人并不知道骑士是怎么移动的,其实国际象棋中的其实相当于中国象棋中的马,他的移动轨迹的“日”字形的,只是少了中国象棋中的“蹩马腿”这一说。知道了这一点,这道题就简单多了,很水的一道BFS题目。实现代码如下:

2015-03-13 16:43:47 535

原创 HDU1253 胜利大逃亡 三维BFS

本题大意就是让你求出一个三维迷宫的最少步数解,如果迷宫不通,输出-1分析:由于是让找出最小步数,BFS更好些(BFS是逐层往外搜索的,当前解即为最优解),只需把方向数组改一下就行了,总体来说和二维BFS没太大差别。实现代码如下:#include #include #include using namespace std;int dir[6][3]={{1,0,0},{0,1,0

2015-03-13 16:09:16 595

原创 DFS:多米诺骨牌游戏

问题描述:多米诺骨牌的游戏规则是这样的:推倒一张骨牌,由于连锁反应和它有关的多米诺骨牌都会相应倒下。谁推倒的骨牌数量多,谁就是赢家。但今天我们把规则改变一下,我们引入一张特殊的骨牌“の”,最后推倒的骨牌是这张牌的人为赢家。输入部分:每组测试先给出2个正整数n,m(2骨牌(西红柿也是一种多米诺骨牌)。接着有n行,每行有m个整数。每个单元里的整数grid[i][j]表示的是推倒

2015-03-12 21:29:59 1812

原创 BFS:中国象棋中的跳马问题

问题描述是这样的:有一张p*q的棋盘,并且棋盘中有障碍物(用来限制马的行动,即中国象棋中的蹩马腿)。有一个棋子马(走“日”字形路线),要从起始点走到终点。输入部分:第一行输入一个整数n,表示有n组测试实例,每组测试数据第一行输入两个整数p和q,表示棋盘的大小(1输出部分:输出马从起始位置走到终点所需的最小步数。若马不能走到终点,输出“ can not reach

2015-03-12 20:54:08 2922

原创 HDU1258 POJ1564 Sum It Up DFS

题目大意:输入两个整数t和n,然后输入n个整数,让你找出这n个整数中,和为t所有的算式。#include #include using namespace std;int n,t;int num[15],ans[15];bool flag;void dfs(int sum,int x,int cnt){ if(sum==t) { flag=true

2015-03-12 12:54:05 494

原创 HDU1242 Rescue BFS+优先队列

题目大意:一个天使被困在了迷宫中的监狱,迷宫中有警卫看守,天使的朋友想去监狱中营救天使,每走一步花费一个时间单位,击杀警卫额外花费一个时间单位(即有警卫的地方是可行的,只有围墙不能通过),问你营救天使最少需要花费的时间。分析:由于可能有多个救援人员,所以我们可以从天使所在地为迷宫入口向外开始搜索,当遇到第一个营救人员时,这之间花费的最少时间即为最终答案。BFS即可,考虑到有时间差别,故用了

2015-03-11 17:47:49 579

原创 c++STL中优先队列的使用

说到队列,我们首先想到就是先进先出,后进后出;那么何为优先队列呢,在优先队列中,元素被赋予优先级,当访问元素时,具有最高级优先级的元素先被访问。即优先队列具有最高级先出的行为特征。优先队列在头文件#include 中;其声明格式为:priority_queue ans;//声明一个名为ans的整形的优先队列基本操作有:empty( )  //判断一个队列是否为空pop( )

2015-03-11 16:15:42 25578 4

原创 HDU1241 Oil Deposits DFS

题目大意:有一块油田,@表示改点为原油,*表示空地,每相邻的原油点(即上,下,左,右,斜边共8个方向相邻任意一方向相邻都可),他们的品种是一样的,现在问你该油田共有多少种不同的原油品种。分析:枚举每一个坐标点,如果该点为原油,计数器++,同时以该点为起点进行深搜,标记和该点相连的原油点为*。这样,枚举完每一个点之后,我们也就找到了不同的原油品种的数目了。裸DFS就行,下面是我的代码:#

2015-03-11 15:19:16 426

原创 HDU1010 Tempter of the Bone DFS+剪枝

题目大意:一条狗因为一根骨头陷入了迷宫中,time=0时刻狗在迷宫的入口S处,狗每一次只能移动到上,下,左,右中临近的有效格中(即题目中的 " . ")且只能呆1秒的时间(真是太为难这只可怜的doggie了),走过的路在下一秒塌陷(即不能重复走路),问你这条狗能否在第T秒(time=T时)恰好走到迷宫的出口D处。很显然这道题是搜索题,但提交时就会发现问题来了,直接DFS果断TLE了。其实这

2015-03-11 13:29:26 423

原创 POJ1321 棋盘问题 DFS

#include #include #include using namespace std;int map[10][10];bool s[10];int num,n,k;void dfs(int r,int t){ if(t==k) { num++; return ; } if(r>n) return ; f

2015-03-10 20:39:54 445

原创 图的遍历:BFS和DFS

先来看图的深度优先遍历:        深度优先遍历的基本思想是访问顶点V0,然后访问V0邻接到的未被访问的顶点V1,再从V1出发递归地按照深度优先的方式遍历。当遇到一个所有邻接于它的顶点都被访问过了的顶点u时,则回到自己访问顶点序列中最后一个拥有未被访问相邻顶点的顶点w,从w出发继续访问。最终当任何已被访问过的顶点都没有未被访问的相邻顶点时,遍历结束。也就是说,深度优先遍历是沿着图的某一条分

2015-03-10 15:37:40 629

原创 POJ1088 滑雪 DP+记忆化搜索

#include #include #include using namespace std;int map[105][105];int dp[105][105];int num,c,r;int bfs(int x,int y){ if(dp[x][y]) return dp[x][y]; int nmax=1; int len; if(x+1map

2015-03-10 13:14:48 548

空空如也

空空如也

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

TA关注的人

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