ACM
文章平均质量分 76
xiaoxiaoluo
这个作者很懒,什么都没留下…
展开
-
poj 2488 深度优先遍历
题目大意:按照国际象棋骑士的走法,要你让骑士能够遍历每个棋盘的格子,按照字典序输出走法,没有则输出impossible解题思路:深度优先遍历,因为要按字典序输出,所以,深度遍历时要按照一定的方向进行遍历#include #include #include using namespace std;const int maxn = 27;struct node原创 2012-05-07 01:45:50 · 1055 阅读 · 0 评论 -
poj 3083
题目大意:给一个迷宫,要你分别求出按先考虑左边的方向,和先考虑右边方向走出迷宫所经过的格子,还有走出迷宫经过的最少格子解题思路:题目不难,比较繁琐,就是深度优先左边遍历和深度优先右边遍历还有就是广度优先遍历迷宫深度优先遍历和宽度优先遍历时,要区分从上一个格子过来的方向来判断下一个格子的左边右边是哪个格子 #include #include #include #inclu原创 2012-05-09 02:18:42 · 1158 阅读 · 0 评论 -
poj 2225 三维空间宽度遍历
题目大意:给定一个三维的空间,还有起点和终点坐标,要你求到终点的最短距离解题思路:最短距离用宽度优先遍历,分别考虑上下,左右,前后6个方向。题目很简单,就是要注意下坐标顺序#include #include #include #include using namespace std;struct Point{ int x, y, z;};s原创 2012-05-10 01:54:01 · 697 阅读 · 0 评论 -
zoj 2110 hdoj 1010 深度遍历+奇偶性剪枝
题目大意:要你求一个迷宫中,起点s经过给定的步数是否能到终点t,迷宫中有挡板,挡板是不能走的格子解题思路:很明显的搜索题,用深度优先或宽度优先遍历搜索是否满足,给定步数,也就是求起点根结点到终点最终解的那个搜索树经过的边树深度优先遍历,要用到奇偶性剪枝,开始不知道啥叫。。。。奇偶性剪枝,看了这哥们的博客才明白:详情见:http://www.cppblog.com/Geek/arch原创 2012-05-08 00:55:16 · 1080 阅读 · 0 评论 -
poj 1562 深度优先遍历
水题。。。。。题目大意:@表示油田,油田的周围8个方向有@则认为这两个油田是一个,要你求一共有多少油田解题思路:就是求多少个连通分量,顺序扫描,每扫面到一个@,并且这个格子没有被深度遍历遍历过,就进行一次深度优先遍历,遍历的次数就是分量个数#include #include #include using namespace std;const int max原创 2012-05-10 02:38:57 · 956 阅读 · 0 评论 -
hdoj 1242 宽度优先
题目大意:有一个人关在监狱里,他有很多个朋友要去救他,求这些朋友救到他花费的最短时间,碰到警卫,他们就杀死警卫,要花费两个时间值解题思路:看到最短消耗时间,想到了bfs,有因为有多个朋友r去解救Angel,所以想到以Angel的位置为起点,bfs求到任意一个朋友的位置花费最小的时间,之前直接就这么用bfs结果错了,忽略了碰到警卫是花费两个时间值,而直接走只花费一个时间值,所以还得改造下。用一个原创 2012-05-11 02:23:16 · 971 阅读 · 1 评论 -
poj 1979 bfs
题目大意:求从起点开始能够经过的黑格子的数目,红格子不能走,走的过程中,格子可以重复经过解题思路:水题~~bfs,只要求出bfs能扩展的节点数就是格子数目#include #include #include #include using namespace std;const int maxn = 21;struct node{ int x,原创 2012-05-15 01:41:37 · 693 阅读 · 0 评论 -
poj 2243 双向bfs和A*
题目大意:就是给你一个起点和一个终点,按骑士的走法,从起点到终点的最少移动多少次解题思路:水题~~~直接bfs就可以了,没写过双向bfs,这次训练一下,双向bfs就是用两个队列,一个队列保存从起点开始的状态,另一个保存从终点开始向前搜索的状态,双向bfs主要是区分每个格子是从起点开始搜索到的还是从终点开始搜索到的~每个经过的格子结点保存到达该格子经过的步数,这样两边要是相交了相加就是结果另原创 2012-05-16 01:57:39 · 2147 阅读 · 3 评论 -
zoj 1457 求素数环
题目大意:是求一个素数环解题思路:简单的dfs,卡在求最后一个数,它不光与1相加为素数和后面的那个数相加也得为素数,漏了后面那个,wa了好几次。另外要是n为奇数不能成为素数环,因为奇数的个数比偶数多一个,所以至少会有一对相邻的两个数是奇数,这两个数的和不可能是素数。#include #include #include #include using namespace s原创 2012-05-16 23:49:42 · 1260 阅读 · 0 评论 -
poj 3356 求最短编辑距离
题目大意:给定两个字符串x,y,要你求出x经过插入,删除,替换变成y所要的最少操作,即编辑距离。解题思路:动态规划,列出状态方程,设dp[i][j]表示字符串x[1...i]和字符串y[1...j]的最短编辑距离当x[i] == y[j]时,i和j不需要编辑,要么删除,要么插入,要么替换dp[i][j] = min(dp[i-1][j-1], dp[i-1][j] + 1, dp[i]原创 2012-06-08 07:58:37 · 1995 阅读 · 0 评论 -
zoj 1004 深度优先遍历
题目大意:两组数,第一组字符串通过压栈弹栈顺序,得到第二组数据,输出压栈弹栈顺序,解有多个,按照字典序输出解题思路:深度优先遍历,借助一个栈来保存第一个字符串压栈的状态,优先考虑压栈操作,注意的是边界条件,满足第二个字符串扫描到尾部时,输出结果#include #include #include #include using namespace std;const原创 2012-05-18 01:26:06 · 861 阅读 · 0 评论 -
kmp poj 3450 3461
这两题都比较简单,很明显的kmp求解poj 3450题目大意:就是求最长的公共子串,如果有长度一样的,取字典序最小的跟poj 3080基本一模一样,没啥好说的~#include #include #include using namespace std;const int maxn = 4010;const int maxm = 210;int n,原创 2012-04-19 02:10:00 · 1161 阅读 · 0 评论 -
kmp poj 3167
参考了这个http://www.cppblog.com/zxb/archive/2010/10/06/128782.aspx?opt=admin他用的是hash的思想题目大意是:给一个字符串,在给个子串,求子串是否在是整个字符串的子串,字符串之间的匹配遵循相对位置例如给定:5 6 2 10 10 7 3 2 9然后子串: 1 4 4 3 2 1它与 2 10 10 7转载 2012-04-19 01:15:08 · 1796 阅读 · 0 评论 -
kmp练习 poj 2541
题目大意:给出一个01字符串,表示天气情况,0表示下雨,1表示天晴,要你预测未来l天的天气情况预测规则是,比如给了n个字符串,后t天,s[n-t + 1] ~~~s[n]的天气情况和s[k-t+1] ~~~s[k]一样,k 解题思路:逆向kmp,从最后一个n往前做kmp写的时候容易出错的地方是先判断匹配的字符串是否超出了13~~然后再来看求那个最大的k 代码实现:#in原创 2012-04-11 02:33:20 · 1000 阅读 · 1 评论 -
kmp poj 3080
题目大意:给出几组测试的字符串组,要求你求出每组字符串的最长公共子串,公共子串长度要求至少为3,注意,当出现等长的公共字符串时,输出字符串最小的那个若没公共子串,输出“no significant commonalities”解题思路:kmp枚举,让第一个字符串的长度大于等于3的子串分别于其他字符串匹配比较,求出最长的子串#include #include #i原创 2012-04-16 01:09:28 · 818 阅读 · 0 评论 -
poj 1198 || zoj 1505 || hdoj 1401 双向宽度遍历
参考了:http://blog.csdn.net/zxy_snow/article/details/6844220题目大意:给出两个棋盘布局,问第一个棋盘布局,移动不超过8步,是否能到达第2个棋盘布局,移动棋子时,要是相邻的格子有棋子,而再过去没有棋子,则可以跳过这个棋子到达下一格解题思路:双向宽度遍历,因为到达最终状态的布局,所以可以从最终状态反向走到达,因为最多不超过4步,那么从开始状转载 2012-05-20 11:47:59 · 1000 阅读 · 0 评论 -
kmp算法练习 poj 1226 poj 1961
poj 1226题目大意:给出一组字符串,要你求出这些字符串的最长公共子串的长度,公共子串可以正序或逆序匹配解题思路:kmp枚举,枚举第一个字符串的每个子串的正序和逆序,与其余的字符串匹配看是否是其子串,求出最大的子串长度。这题也可以用后缀树求,留待后面研究。。。。#include #include #include using namespace std;co原创 2012-04-03 01:35:08 · 1315 阅读 · 1 评论 -
poj 3261 求可重叠k次最长重复子串
选自《后缀数组--处理字符串的有力工具》题目大意:给出字符串长度n,还有可重复子串至少出现k次。求这个重复子串的最长长度。解题思路:和poj1743差不多,不同的是二分时,判断一个组的后缀子串个数是否小于k#include #include #include #include using namespace std;const int maxn = 20010;转载 2012-06-14 03:08:51 · 1114 阅读 · 0 评论 -
hdoj 1427 24点游戏
题目大意:给一组数,问这组数通过加减乘除4则运算结果是否为24解题思路:《编程之美》上面的解法~~每次选取两个数做加减乘除,比如(a,b,c,d)选a,b两个数做加法,那么形成了(a+b,c,d)然后继续递归,其他的四则运算一样,加法和乘法满足交换律。方法一:171MS460K2372 B#include #include #incl原创 2012-06-17 02:10:25 · 784 阅读 · 0 评论 -
poj 1050 求矩阵的子矩阵的元素和最大
题目大意:求矩阵的子矩阵的元素和最大解题思路:《编程之美》上的,把二维空间的转换为一维的,编程求一维数组子序列和的最大值确定矩阵行的上下界,一旦确定了行的上下界,这个每列在这个上下界区间的元素和就可以看做是一维数组的单个元素。枚举上下界,求最大值#include #include #include #include using namespace std;con转载 2012-06-18 02:38:04 · 822 阅读 · 0 评论 -
spoj 694 不相同的子串的个数
转自:《后缀数组---处理字符串的有力工具》题目大意:要求求一个字符串中不同子串的个数解题思路:利用后缀数组,每个子串一定是某个后缀子串的前缀,求多少个不同的子串等价于求出所有后缀之间的不相同的前缀的个数。设字符串为str,sa[i]表示排名第i的后缀从str的第sa[i]个位置开始,rank[i]表示str[i]开始的后缀排第几位height[i]表示sa[i]和sa[i-1]的转载 2012-06-20 01:20:04 · 1993 阅读 · 0 评论 -
poj 1037 动态规划 + 计数,求排列布局
这道题,黑书上p257有解题的分析,之前没看明白~~,网上搜了一大堆看了http://jay23jack.blog.163.com/blog/static/317951942009130215813/http://blog.csdn.net/geniusluzh/article/details/6936063这两位大牛的报告题目的大意就是一些装饰栏,编号为1,2,3,...,n,他们的原创 2012-03-18 01:38:46 · 1226 阅读 · 0 评论 -
poj 1743 求不可重叠最长字符串
http://hi.baidu.com/blackstar08/blog/item/6909b391bb308a83a977a429.html题目大意:给定一段音乐乐谱,其中的音符用数字表示出来( 范围 [ 1,88 ] ),要求的是这段乐谱的主旋律。所谓的主旋律,就是满足以下三点要求的一段子串:1、音符的数目至少为5;2、重复出现在乐谱中的另一个地方;3、不相互重叠;转载 2012-06-14 02:23:16 · 733 阅读 · 0 评论 -
ural 1297 最长回文子串
参考:基本是看他的http://bbezxcy.iteye.com/blog/1418354参考论文《后缀数组--处理字符串的有力工具》题目大意:要你求出一个字符串的最长回文子串解题思路:常规方法是枚举每个字符,每个字符两边扩展,比如第i个字符,分奇偶两种str[m] .... str[i] ..... str[n] m到i的字符串与n到i的字符串匹配str[m]......s转载 2012-06-23 20:58:58 · 688 阅读 · 0 评论 -
poj 1679 求最小生成树的值是否唯一
题目大意:求最小生成树的值是否唯一,唯一输出这个值,不唯一则输出Not Unique!解题思路:先求出最小生成树,保存最小生成树的路径,然后按边的大小由小到大枚举每条没有加入最小生成树的边比如是(u,v),在已经形成的最小生成树种,取u到v路径上最大的边的权值,比较(u,v)的这个最大权值的大小,如果相等,说明最小生成树不唯一,如果不相等,说明唯一。 #include #inclu原创 2012-06-25 02:03:49 · 643 阅读 · 0 评论 -
算法导论 15-4 数形DP poj 2342
这个道题跟poj 2342上的一样。题目大意:就是一个树,树的每个结点有个值,选了某个结点,就不能选择它的父结点,求整棵树选的节点值最大是多少。解题思路:简单的树形DPdp[i][0]表示不选i结点时,i子树的最大价值dp[i][1]表示选i结点时,i子树的最大价值那么列出状态方程dp[i][0] = sum(max(dp[u][0], dp[u][1])) u 为结点i原创 2012-06-18 22:47:50 · 1358 阅读 · 0 评论 -
poj 3286 求一个区间十进制数的0的个数的和(附:0~N十进制表示1的个数和)
题目大意:给定一个正数区间,要你求这个区间,包含区间两端点的十进制表示0的个数和解题思路:假设区间[a, b],求0 ~ a - 1的这些数中0的个数,0~b的这些数中0的个数,然后把他们相减即为所求。若a为0时,只要求0~b的0的个数就可以了。求某个数,比如4位数abcd,只要求每位数对0的个数的贡献就行比如3421,百位数对0的贡献有:1000,1001...1099,2000原创 2012-07-08 01:08:58 · 1039 阅读 · 0 评论 -
poj 1015 选配陪审团(对于维度中有负数的情况)
题目大意:给出一组陪审团,里面有n个人,其中每个人i都有等概率的支持或反对一个决定,支持一个决定的分数为Ai,反对一个决定的分数为Bi要你求出,在n个人里面选出m个人,使得这m个人在| sum(Ai - Bi) | i属于[1, m] , 绝对值最小时,sum(Ai + Bi)最大,输出这种选择策略下,赞成一个决定的总分数,和反对一个决定的总分数,并要求出选举的策略。解题思路:动态规划。原创 2012-07-12 00:58:17 · 980 阅读 · 0 评论 -
poj 1636 监狱布局 dfs + dp 或 传递闭包 + dp
http://www.cnblogs.com/zhaoguanqin/archive/2012/04/03/2430895.html题目大意:有两个牢房,人数相等,都为m,现在要求交换这两个牢房的囚犯,其中有些囚犯是不能放在同一个牢房的,要你求出交换次数最大为多少,且不超过m/2解题思路:动态规划+深度优先遍历。dp[i][i]表示i对人交换成功。标记出两个牢房A,B, A中的转载 2012-07-13 01:46:09 · 1994 阅读 · 3 评论 -
poj 1692 求数字匹配对数
题目大意:给定两组数字,求这两组数的最大匹配对数,即两个数相等就连一条线。匹配的连线需要交叉,一个数字匹配过后不能再次匹配解题思路:动态规划。dp[i][j]表示,第一组数前i个与第二组数前j个的最大匹配数。那么dp[i][j] = max(dp[i-1][j-1], dp[i-1][j], dp[i][j-1], dp[k1][k2] + 2)k1,k2表示当num1[i原创 2012-07-16 00:49:26 · 1130 阅读 · 0 评论 -
zoj 2107最短点对
题目大意:要你求最短点对的中点距离解题思路:分治法求最短点对,具体参考《算法设计与分析》(郑宗汉 郑晓明) p100面。把点按照X坐标的大小从小到大排列,然后把点按Y坐标从小到大排列。把点集二分,递归求出左边点集合的最短点对距离,和右边点集最短点对距离。取最小值d取中轴左右d距离的点对,比较这些点对的距离,看是否小于d。#include #include #inc原创 2012-08-07 10:18:47 · 1031 阅读 · 0 评论 -
poj 1700过河问题
题目大意:N个人要过河,只有一个蜡烛且只有一条船,船每次最多坐2个人。不管怎样,过河者(1个人或者2个人)都必须有蜡烛,所以过河后可能需要人返回送蜡烛,然后再继续过河。问怎样过河时间最短。解题思路:贪心,先把时间从小到大排列。考虑N等于1时,就是一个人过河的时间,N等于2时,为两个人的最大时间,N等于3是,为最小和次小过去,最小回来,然后最小和最大时间过去,总时间为T[0] + T[1]原创 2012-08-08 13:15:08 · 691 阅读 · 0 评论 -
poj 2299 求逆序对
题目大意:求逆序对解题思路:分治法,类似于归并排序。A[1.....n],将原问题划分为2个子问题A[1...n/2], A[n/2+1....n],并且两个子数组已经排好序了,1..n/2的逆序对已经求好,n/2+1...n的逆序对也已经求好了所以求两个子问题之间的逆序对,在归并排序的过程中,当A[i] 特别注意当j已经扫描完时,逆序对要加 j - n / 2 - 1#in原创 2012-06-24 01:46:37 · 1940 阅读 · 1 评论 -
poj 1007 分治求逆序对
题目大意:给出一组字符串,给这组字符串按逆序对数从小到大排列。解题思路:按分治类似归并排序算法求出每个字符串的逆序对数,在用快速排序排列求逆序对数类似poj 2299题 http://blog.csdn.net/xiaoxiaoluo/article/details/7686942这里注意的是当逆序数相同时,按照字符串原先的相对位置输出。#include #includ原创 2012-07-26 02:50:38 · 749 阅读 · 0 评论 -
poj 2255 二叉树 已知先序和中序,求后序
题目大意:已知二叉树的先序和中序排列,要你求它的后序解题思路:水题,根据二叉树的性质,递归求解,DBACEGF ABCDEFGD为二叉树的根节点, BAC, ABC为以D为根结点的左子树的先序和中序排列,EGF,EFG为以D为根结点的右子树的先序和中序排列。然后递归求解#include #include #include using namespace std;原创 2012-08-09 16:46:35 · 1545 阅读 · 0 评论 -
poj 1256 Anagram
求字符串的字典序,不过字典序要按照'A'同http://blog.csdn.net/xiaoxiaoluo/article/details/7848915这里有方法介绍,只要加个比较函数就可以。#include #include #include #include using namespace std;const int maxn = 100;char str[maxn原创 2012-08-09 20:19:10 · 661 阅读 · 0 评论 -
poj 2431 Expedition 贪心 + 优先队列
题目大意:有n个加油站,每个加油站的加油的油量有限,距离终点都有一个距离。一个卡车的油箱无限,没走一个单元要消耗一单元的油,问卡车到达终点的最少加多少次油。解题思路:贪心。。。。。卡车走得越远越好,要是不能到达终点,就选择经过的油站里面,加油量最多的加油,然后继续。所以先按照加油站距离终点的距离,从大到小排列。利用优先队列来存经过的加油站,根据加油站加油的油量多少排序。原创 2012-08-10 00:42:47 · 3788 阅读 · 0 评论 -
poj 2465 Adventures in Moving - Part IV
题目大意:有一辆卡车,从一个城市A到达城市B,车的油箱为200,初始有100的燃料,每走一个单元路程消耗1个单元的燃料。这里有几个加油站,每个加油站是按照距离A城市的距离从小到大排列的,每个加油站每单元的燃料的价格是不同的。要你求卡车到终点加燃料的花费最小时多少,若卡车到不了终点,输出Impossible解题思路:动态规划,dp[i][j]表示行驶到第i个加油站,燃料为j是的最小花原创 2012-08-10 10:37:24 · 882 阅读 · 0 评论 -
poj 2244 Eeny Meeny Moo 约瑟夫环
题目大意:有n个城市编号1,2,3,...,n。第1个城市开始网络会断,然后向后数m个,数到的城市会断网,然后继续数,数到n时从1接上数,之前断网的城市忽略,让你求第2个城市最后断网,m的最小值。解题思路:约瑟夫环,枚举m,求最小m。约瑟夫环的介绍看这个:http://blog.csdn.net/wuzhekai1985/article/details/6628491讲的很详细。这里再转载 2012-08-09 23:30:36 · 650 阅读 · 0 评论 -
汽车加油问题 zju 1033
原题:http://pat.zju.edu.cn/contests/pat-practise/1033 转载:http://blog.csdn.net/hackbuteer1/article/details/7402127#include#include#includeusing namespace std; struct Node{ double price; dou转载 2012-08-10 15:26:48 · 1431 阅读 · 0 评论