摘要: 汉诺塔IIITime Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3657Accepted Submission(s): 1668Problem Description约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左) 阅读全文
posted @ 2011-08-12 21:49 沐阳 阅读(3923) 评论(0) 推荐(0) 编辑
摘要: 首先要说明的一点就是两种搜索的过程都是一个枚举的过程,无论如何都可以将其视为一种暴力求解的过程,当然这个过程中是可以进行剪枝的,即人为的为其判断进行优化,快速舍弃那些不可能的解,最经典要属奇偶剪枝了,这时符合逻辑的因为起点和重点确实存在这种关系,但是这还是不能改变这一搜索过程是近乎盲目的。好了,了解到这两种搜索的属性,我们不禁要思考在什么情况下要用到这两种搜索方式呢?首先因明确两种搜索方式只是利用了搜索过程中的严谨性,即对人而言大量的组合性运算极容易出错(可能在一个迷宫里,你走了20步,拐了3个弯你就不知道自己是打哪来的了),而计算机不会,只要你愿意,它能记录下所有的信息,这时计算机运行算法. 阅读全文
posted @ 2011-08-12 15:58 沐阳 阅读(466) 评论(1) 推荐(0) 编辑
摘要: 首先解释下这题的名字,下沙是个地名,面的是一种公共交通工具,小是个形容词...... 对于这题那便是DFS纯暴力了,每次先到达不同的第一站,再扩展下去到第二站... 暴力枚举每一种可能,最后保留最小值。 代码如下:#include <cstdio>#include <cstring>#include <cstdio>using namespace std;int map[35][35], N, K, obj[35], RK;void DFS( int pos, int step, int dis, int &ans ){ if( step== RK 阅读全文
posted @ 2011-08-12 15:09 沐阳 阅读(533) 评论(0) 推荐(1) 编辑
摘要: 可恶的模拟题,刚进入的那一步竟然不算,贡献了多次WA啊,只要注意这点应该就木有问题了。#include <cstring>#include <cstdlib>#include <cstdio>using namespace std;int N, M, sx, sy;char map[15][15], hash[15][15];bool out( int x, int y ){ if( x< 1|| x> N|| y< 1|| y> M ) { return true; } return false;}bool DFS( int &am 阅读全文
posted @ 2011-08-12 14:39 沐阳 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 给定一个非递减的序列,要求从这些序列中找出一系列的数相加等于要求的数。这题的主要任务就是怎样去重。 现分析如下: 对于给定的两个非递减序列,A, B, C, D 用来映射各个数的位置,2(A) 1(B) 1(C) 1(D) 以及 2(A) 2(B) 2(C) 1(D), 要求求出和为3的表达式。 显然前面的序列递归下去会首先出现A+ B的组合,由于此时A+ B已经等于了3,所以递归就会回溯,此时会形成A+ C的组合,按照正常人的思维,这个解肯定是不能够取的,但是计算机有这么聪明吗?显然还是要我们来设计各种复杂的判断...... 转回正题,我们在递归时有一个属性就是递归的层数,而该题的求解就会. 阅读全文
posted @ 2011-08-12 11:35 沐阳 阅读(419) 评论(0) 推荐(0) 编辑