枚举搜索
文章平均质量分 65
plusplus7
萌系大学生一枚。。。。
展开
-
POJ 3185 The Water Bowls
此题我是写了个BFS过的,用的队列是STL的queue,960ms过的。。用2进制来压缩状态,然后列出20种操作数op[i]。于是在i处的操作就等同于对now=now^op[i],和Flip Game的处理方法一样。但是他们写的BFS会TLE就不知道为什么了。。还有用DFS过的= =后来,得知了一个枚举加贪心的方法,但是没法证明是最优的,得去查查资料。#include #i原创 2012-11-25 01:53:07 · 685 阅读 · 0 评论 -
POJ 3083 Children of the Candy Corn
阅读理解题。。。。。。题目很简单,让你顺时针方向DFS一次求路径长,逆时针方向DFS一次求路径长,在BFS一下求最短路径。#include #include #include #include #include using namespace std;int w,h,map[50][50];struct coordinate{ int x; int y;}原创 2012-11-23 00:56:09 · 352 阅读 · 0 评论 -
POJ 2251 Dungeon Master
3D迷宫,找从开始点到终点的最短路,挺水的一题#include #include #include #include #define INF 0x3f3f3f3fusing namespace std;struct Point3D{ int x; int y; int z;};int x,y,z;Point3D s,e;原创 2012-11-23 22:35:38 · 367 阅读 · 0 评论 -
POJ 3278 Catch That Cow
简单的bfs,访问记录,队列实现#include #include #include #include using namespace std;struct node{ int pos; int step;};queue q;int v[120000];bool judge(node n){ if (n.pos 100原创 2012-11-23 22:56:15 · 390 阅读 · 0 评论 -
POJ 1426 Find The Multiple
暴力求解,本地打表。#include #include #include using namespace std;unsigned long long ans[300]={0,1,10,10000000000000000011,100,10,10000000000000000110,10000000000000000011,1000,10000000000011111原创 2012-11-23 23:32:14 · 508 阅读 · 1 评论 -
POJ 3126 Prime Path
10000-1000内的素数就只有那么多啊,BFS很快就能得出解#include #include #include #include #include using namespace std;bool isPrime(int n){ int i; for(i=2;i<=sqrt((double)n);i++) { if(n%i==0)原创 2012-11-23 23:39:17 · 438 阅读 · 0 评论 -
POJ 3414 Pots
给你两个容量不同的瓶子,要你通过3种操作,量出一定体积的水。就和以前做的益智题一样的。BFS做的,注意要记录路径。。又是深夜做题,用vector记录路径的。不知道怎么样复制一个vector到另一个vector,所以很暴力的for了一遍。。。最后居然1Y了。。。数据太弱了。。。#include #include #include #include #include原创 2012-11-24 01:20:57 · 404 阅读 · 0 评论 -
BNUOJ 3884 Hay Expenses
看第一眼,觉得是很裸的线段树,再看数据范围。。。就彻底无语了。。。#include #include using namespace std;int main(){ int n,a[510],i,s,e,ans,q; scanf("%d%d",&n,&q); for (i=1; i<=n; i++) { scanf("%d",a+i);原创 2013-01-08 01:06:54 · 577 阅读 · 0 评论 -
POJ 3256 Cow Picnic
水BFS#include #include #include #include #include using namespace std;int cnt[1010],a[120];bool ck[1010][120];vector g[1010];queue q;int main(){ int n,m,k,i,j,ans; scanf("%d%d%d",&原创 2013-01-08 01:04:17 · 489 阅读 · 0 评论 -
BNUOJ 3881 Jigsaw Puzzles
USACO Elite 2008 December Competition Silver题意:给你一些正方形的拼图碎块,每个碎块有四个边,每边都有一个记号,分别是小写字母a-z。其中没有标记的边,也就是边界的边用'0'标记。题目给定一个矩阵,把这些碎块放进去,要求每个边相接的记号必须一样,边界上的边必须是'0'。解法:DFS。这个操作起来还是挺麻烦的,做处理的时候要小心一些。原创 2013-01-30 21:53:13 · 895 阅读 · 1 评论 -
POJ 2870 Light Up
题意简述:在n*m的格子中放置灯泡。其中格子中有些障碍,灯光可以照亮上下左右的格子,光线会被障碍挡住。题目解法:搜索。 每个状态的转移会产生很多状态,而目标状态有是不固定的,所以不能BFS或双向BFS。但是DFS又很容易陷入搜索到很深但是却又是错误的状态,而最优解的深度又是不深。所以考虑使用迭代加深搜索。 剪枝:搜到每个障碍时,发现上面的格子是空的,剪枝。原创 2013-04-22 20:55:10 · 1672 阅读 · 0 评论 -
UVa 11212 Editing a Book
黑书P207 例题IDA* 搜索,估价函数设计得很经典。#include #include #include using namespace std;class Board{public: int a[16]; int h; int n; bool readIn() { int i; scanf("%d",原创 2013-04-22 21:03:16 · 1977 阅读 · 0 评论 -
LA 3618 Cubic Eight-Puzzle
立体的八数码问题。 普通的DFS和BFS就别想了,迭代加深TLE,而用启发式搜索又想不到合适的启发函数。可发现目标状态有固定的2^8种,而状态转移的方式最多只有4种......所以用双向bfs,应该能解决问题。因为会产生很多重复的状态,所以用hash表判断一下重复的状态。stl的hash会TLE,所以还是手写静态链表哦。#include #include #include原创 2013-04-22 21:22:29 · 1320 阅读 · 0 评论 -
LA 5506 Eight
同样是South Central USA 1998的题,POJ和HDU上的数据比较水,用BFS不加任何优化都可以AC,时间一般是三位数左右。而用A*或IDA*则可以把时间控制在10ms左右,甚至0ms! 然而UVa Live上的这道题是多数据的,用IDA*不加优化都会超时。除此之外题目输入输出很严格,case和case之间必须有空行,在最后一组case之后不能有空行,否则会Wr原创 2013-04-17 13:07:28 · 797 阅读 · 0 评论 -
POJ 1321 棋盘问题
写个深搜就行了。注意棋子是放在‘ # ’而不是' . '位置。#include #include #include using namespace std;int n,k,cnt,m[10][10],v[10];void Backtrack(int dep,int num){ int i; if (num == k) { cnt++;原创 2012-11-22 19:25:49 · 388 阅读 · 0 评论 -
POJ 2132 Cow Math
此题我用的DFS过。DFS每一条路,用res=gcd(res,now),不断更新res值。当访问到2时,用ans=lcm(ans,res),更新答案,即可。剪枝:如果当前的ans可以整除当前的res,就剪掉,因为当ans%res=0,必然有lcm(ans,res)=ans。剩余一个疑问就是:为什么lcm(a,b,c)=lcm(lcm(a,b),c)?#include #i原创 2012-11-18 12:15:38 · 1053 阅读 · 2 评论 -
POJ 2137 Cowties
题意: n个点集,在每个点集里面选一个点,把所有的点按照编号连接成一个环,使连线长度最短。解法是,枚举第一个点集的每一个点,设为起始点,逐步递推求长度,最后选择答案最小的那个。需要注意的是,最后的答案是要输出整数,直接强制类型转换,用%.0f是会WA的。#include #include #include #include #include using namesp原创 2012-11-18 00:51:17 · 1032 阅读 · 0 评论 -
POJ 2531 Network Saboteur
求无向完全图的最大割,n只有20,所以暴力可以过O(20*2^n)。有个剪枝就是,贪心地选取下一个点。如果发现把点加入另一个集合,割值减少了,就不添加。然后看了discuss发现有人说可以用什么随机算法过,于是就搜索了一下。。随机化算法,是这样一种算法,在算法中使用了随机函数,且随机函数的返回值直接或者间接的影响了算法的执行流程或执行结果。随机化算法基于随机方法,依赖于概率大小。原创 2012-11-25 00:58:58 · 533 阅读 · 0 评论 -
POJ 1416 Shredding Company
这题主要还是理解题意。给你一个数n,和一串长度不超过6的数字。问怎么分割这串数字可以使得分割后的数和不大于n,注意数字的顺序不能打乱。如有多个答案,取最接近n的解。如果不能成功分割,输出error,如果有多个最佳答案,输出rejected。解法很简单,就搜索一下就好了~#include #include #include #include using namespa原创 2012-11-26 15:15:14 · 997 阅读 · 0 评论 -
POJ 2676 Sudoku
题目描述,用程序模拟一下数独。给你9*9的格子,空格用0表示,输出一种方案,使得每一行,每一列,以及每一宫(3*3)都分别由1-9的数字填入。输出任意方案即可。解法,此题有各种解法,DFS即可AC。而Discuss说可以用Dancing Links,没用过额。。有空去研究研究。。我这里用的是DFS+位运算加速判重。700ms水过。。#include #include #incl原创 2012-11-26 17:41:42 · 392 阅读 · 0 评论 -
POJ 1753 Flip Game 状态压缩 枚举
POJ 1753枚举,压缩状态,bfs~#include #include #include #include #include using namespace std;int pow2[17]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536};int change[16]={51200,原创 2012-11-12 21:00:16 · 682 阅读 · 0 评论 -
POJ 2965 贴一下神牛的解法
/*参考高手的高效解法:> 证明:要使一个为'+'的符号变为'-',必须其相应的行和列的操作数为奇数;可以证明,如果'+'位置对应的行和列上每一个位置都进行一次操作,则整个图只有这一'+'位置的符号改变,其余都不会改变.> 设置一个4*4的整型数组,初值为零,用于记录每个点的操作数,那么在每个'+'上的行和列的的位置都加1,得到结果模2(因为一个点进行偶数次操作的效果和没进行操作一样,这就转载 2012-11-12 21:46:24 · 2434 阅读 · 1 评论 -
POJ 3295 Tautology
题意:定义了一种表达式,让你判断这个式子是不是永真式。因为命题变元最多只有5个,所以可以把写真值表的那个过程模拟一下,就ok了。ps,这题居然1A,我本以为会wa很多次咧。。。#include #include #include using namespace std;int q,p,r,s,t;int pos;int judge(char *str){ int原创 2012-11-14 09:15:17 · 410 阅读 · 0 评论 -
POJ 1068 Parencodings
水题一只,你可以用各种方法A它~#include #include #include using namespace std;int main(){ int n,a[1000],i,j,f,c,t,T,p; while (scanf("%d",&T) != EOF) { while (T--) { sca原创 2012-11-14 09:27:24 · 332 阅读 · 0 评论 -
POJ 2109 Power of Cryptography
float 32 6~7 10^(-37) ~ 10^38double 64 15~16 10^(-307) ~ 10^308long double 128 18~19 10^(-4931) ~ 10 ^ 4932#include #include #include using namespace std;int main(){ double n,p原创 2012-11-13 22:16:13 · 405 阅读 · 0 评论 -
POJ 2632 Crashing Robots
模拟题不算特别麻烦,模拟两只小机器人的行为,判断他们是否会撞墙以及相撞#include #include #include using namespace std;struct maze{ int x; int y; int dir;};int cdir(char t){ if (t == 'E') return 1;原创 2012-11-14 09:30:50 · 342 阅读 · 0 评论 -
POJ 1573 Robot Motion
水模拟题一只。。。#include #include #include #include using namespace std;int cnt[1000][1000],n,m,lc,s;char map[1000][1000];int go(int x,int y){ while (1) { if (x = n || y >= m)原创 2012-11-14 09:52:19 · 422 阅读 · 0 评论 -
POJ 2996 Help Me with the Game
模拟题哇。。注意一下,白棋先按行数(棋盘的行编号)升序排,然后按照列升序排。黑棋先按行数(棋盘的编号)降序排,然后按照列升序排。#include #include #include using namespace std;bool f;char a[17][33];void find1(char c){ int i,j,q,w; f=false;原创 2012-11-14 13:17:26 · 412 阅读 · 0 评论 -
POJ 2488 A Knight's Journey
把起点设为A 1点,DFS找序列#include #include #include using namespace std;int r,c,flag,map[30][30];int lc[1000][2];int dir[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1}, {-2,1},{2,1},{-1,2},原创 2012-11-17 02:06:01 · 424 阅读 · 0 评论 -
POJ 2133 Cow Imposters
因为牌子的种类最多有2^16个,所以搜索一下就可以得到答案。#include #include #include #include #include using namespace std;struct T{ int n; int c;};queue q;int tar,len,le,v[68000],E[120];char str[20]="11001"原创 2012-11-18 16:59:31 · 756 阅读 · 0 评论 -
【博客搬家】本博客已全面停止更新,新博客地址 plusplus7.com
新博客地址:http://www.plusplus7.com原创 2013-11-23 21:24:40 · 1391 阅读 · 0 评论