随笔分类 -  搜索/暴力/穷举

摘要:Wrong Answer思路:1.先枚举4的全排列,即球赛的所有可能结果,一共4!=24种情况2.对于每种情况,DFS 未确定的比赛 的结果,判断这种情况是否可达。剪枝:1.对于每种全排列,只需要找到一种满足这个全排列的情况即可,如果有一种情况满足,则不必再枚举其他可能。2.因为在每种情况下,球队之间的排名已经确定了,所以在DFS的过程中,凡是不满足此排名的情况统统可以剪掉。这样就可以少很多情况,即使在n=0的情况下也跑出了不错的效率,但是它Wrong Answer on test 17了。。。求指点T^T 1 #include 2 #include 3 #include 4 #... 阅读全文
posted @ 2013-07-19 01:09 冰鸮 阅读(332) 评论(0) 推荐(0)
摘要:简单BFS,就是题意理解了好长时间题意:给你三个棋子,要求用最少的步数将这三个棋子移动到同一节点上。每次可以沿一条边移动一个棋子,只有当该边的颜色与另外两个棋子之间的边的颜色相同时才可以移动。 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <queue> 5 6 using namespace std; 7 8 const int MAXN = 60; 9 10 int n;11 int st[3];12 bool vis[626262];13 i 阅读全文
posted @ 2013-06-07 20:43 冰鸮 阅读(262) 评论(0) 推荐(0)
摘要:BFS入门,经典倒水问题,想当年在UVa上做的第一道BFS,今天在POJ上拿来复习一下。拓展队列时注意去掉一些不必要的情况和细节:1.空杯子不能向外倒水2.水从A倒入B后,B水满或不满分情况考虑。据说可以一个式子解决……我是没一个式子解决掉,就分开写了。3.水满的杯子不能再向里倒水 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <queue> 5 6 using namespace std; 7 8 const int MAXN = 30000; 阅读全文
posted @ 2013-06-05 22:01 冰鸮 阅读(301) 评论(0) 推荐(0)
摘要:之前WA是被这组数据卡掉了:45 15 25 35 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <queue> 5 #include <algorithm> 6 7 using namespace std; 8 9 struct node 10 { 11 int Haash; 12 int use[8]; 13 int count; 14 }; 15 16 17 bool vis[ (1 << 22) + 10 ]; 18 阅读全文
posted @ 2013-05-31 10:35 冰鸮 阅读(578) 评论(0) 推荐(0)
摘要:DescriptionYou are given a number matrixAwithNrows andMcolumns. Elements in the matrix are referred asAi,jwhere 0≤i<Nand 0 ≤j<M. The matrix has the following two properties:lFor each row, the numbers increase from left to right, that isAi,j-1≤Ai,jfor all 0 ≤i<Nand 1 ≤j<MlFor each column, 阅读全文
posted @ 2013-04-30 09:47 冰鸮 阅读(243) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3460题意:有一些高度不等的书,可以一次取出一摞相对顺序不变的书插入任意位置,问最少多少次操作才能使书的高度递增有序。IDA*,刘汝佳黑书P169的例题,经典题目,启发函数的设计十分巧妙。以“h(s)=后继书本高度正确的书本个数”为估价函数,假设每次把一摞书本S从P1后面移动到P2后面,只有P1,S1的最后一本,P2三本书的后继有变化,h每次最多减少3,令h'=h(s)/3作为估价函数值,则每次h最多减少1。 1 #include <cstdio> 2 #include <cstring> 3 #i 阅读全文
posted @ 2013-04-25 23:01 冰鸮 阅读(440) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3322源自Bloxorz游戏:点此试玩挺有意思的一题,搜索本身不难,主要在表示状态上想了很长时间。木块的状态可以压缩为三种:直立,横放,竖放。每种状态记录最上边或者最右边的坐标即可。初始状态不一定是竖直放的,我玩了几关游戏,初始状态都是竖直放的,我就默认为初始状态竖直了于是WA了几次……也可能有这种情况:7 5######...##O..##...##.XX##...######还有最好把全部的图都读入进来之后再判断起始坐标,读一个点判一次容易出错。单向广搜:11520958gbr3322Accepted10280K579MSG+ 阅读全文
posted @ 2013-04-25 12:17 冰鸮 阅读(208) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=1077经典八数码问题,作为A*与IDA*的入门题来说是很不错的。第一次学习A*与IDA*,代码参考了:http://www.cnblogs.com/liyongmou/archive/2010/07/19/1780861.html推荐一篇介绍A*算法的文章:http://hi.baidu.com/catro/item/4782da1769edbd721109b5e9英文原文:http://www.policyalmanac.org/games/aStarTutorial.htmA*算法的动画演示:http://www.java3z 阅读全文
posted @ 2013-04-23 15:08 冰鸮 阅读(220) 评论(0) 推荐(0)
摘要:题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=2671分析:广搜,在加入Joe的起始位置之前,先把所有着火点加入队列。Joe只能到达没有障碍和火势控制的格子。 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 1004; 5 const int dx[] = { -1, 1, 0, 0 }; 阅读全文
posted @ 2012-12-05 17:24 冰鸮 阅读(421) 评论(0) 推荐(0)
摘要:题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=109&page=show_problem&problem=121题目描述:(待编辑)分析:(待编辑) 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 12; 5 6 char num1[MAXN], num2[MAXN], sum[MAXN], str[100]; 7 int len1, len2, 阅读全文
posted @ 2012-11-08 23:36 冰鸮 阅读(481) 评论(0) 推荐(0)
摘要:题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=109&page=show_problem&problem=323题目描述:给定几个图形,问能否拼成一个4*4的矩形分析:这个题虽然放在难回溯里,但因为没有旋转翻转之类的操作,所以不是很难。一行一行的放就行了。 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 10; 5 6 struct piece 阅读全文
posted @ 2012-11-06 21:25 冰鸮 阅读(186) 评论(0) 推荐(0)
摘要:题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=109&page=show_problem&problem=506题意:一群人想点一个Pizza,每个人都提出一些条件,求出一个Pizza满足每个人至少一个要求。分析:一共16中物品,每种放或不放,最多2^16中情况,用二进制表示一下就行。我做的有些麻烦了,一开始没加剪枝1,TLE,加上剪枝1过的也很悬,2.440s。剪枝1:如果这种选法选择了未出现的物品,则不符合条件。剪枝2:如果满足了这个人的某 阅读全文
posted @ 2012-10-17 20:53 冰鸮 阅读(359) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=2488分析:简单DFS,注意字典序最小 1 #include <cstdio> 2 #include <cstring> 3 4 const int dx[] = { -1, 1, -2, 2, -2, 2, -1, 1 }; 5 const int dy[] = { -2, -2, -1, -1, 1, 1, 2, 2 }; 6 const int MAXN = 30; 7 8 struct point 9 {10 int x, y;11 };12 13 bool vis[MAXN][MAXN];14 p 阅读全文
posted @ 2012-08-24 11:30 冰鸮 阅读(182) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3647题意:给你十个俄罗斯方块,问你能否拼成指定长宽的矩形,方块下落的顺序是严格确定的,后下落的方块不能落在先下落的方块之下。分析:这个题的方法跟 POJ 1020Anniversary Cake 完全一致。具体分析参见http://blog.csdn.net/lyy289065406/article/details/6683250每个俄罗斯方块都是由更小的小方格拼成的, 可以用一个一维数组来记录每一列已经摞上了多少个小方格。DFS遵循底部放满原则,如果可以恰好和已存在的方块实现无缝拼接才往上放,否 阅读全文
posted @ 2012-08-09 10:30 冰鸮 阅读(480) 评论(0) 推荐(0)
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002分析:类八皇后问题,简单DFS。 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 char map[8][8]; 6 int n; 7 int max; 8 9 bool check( int x, int y )10 {11 for ( int i = x - 1; i > 0; i-- ) if ( map[i][y] == & 阅读全文
posted @ 2012-08-08 14:18 冰鸮 阅读(205) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3711分析:直接暴力 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 100 + 10; 5 6 struct Set 7 { 8 int num; 9 char bi[25];10 };11 12 char str[25];13 int m, n;14 char temp[25];15 Set S[MAXN];16 17 void Change( int num )18 {19 memset( .. 阅读全文
posted @ 2012-08-05 15:08 冰鸮 阅读(189) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3713题目:两个小球同时在两个迷宫里走,求使两个小球同时到达终点的最短走法。小球不能越出迷宫界,也不能掉到洞里。有的格子有挡板,如果挡板阻碍了小球的移动,则小球会呆在原地不动。如果有多组解,输出字典序最小的那个。分析:裸BFS,但是我错了很多遍,因为之前有些地方没想清楚。1,一开始我把 [小球被挡板阻碍] 和 [小球越界,小球掉到洞里] 放到一起考虑,写了个判断,都认为它们是不可达的。这是错误的。实际上这是两种情况,因为题目中有说:The barriers may make the commands 阅读全文
posted @ 2012-08-05 14:53 冰鸮 阅读(415) 评论(0) 推荐(0)