题意:给一个地图,孙悟空(K)救唐僧(T),地图中'S'表示蛇,第一次到这要杀死蛇(蛇最多5条),多花费一分钟,'1'~'m'表示m个钥匙(m=dis[当前状态],那么就不再扩展下去了。BFS中的逻辑就很简单了,看代码吧。最后,枚举蛇的状态S,取dis[x][y][m+1][S]的最小值即为最小步数...
分类:
其他好文 时间:
2014-09-20 19:38:49
阅读次数:
443
题意:在一个冰面网格板上,有空白处(无障碍),和障碍块,有一个小石头,给定其起点和终点,求从起点到终点的最小步数
规则:小石头不能在障碍区运动,一旦从某一方向开始运动,不会改变方向,也不会停止,除非碰到障碍物或到达终点才会停止,这为一步。若碰到障碍物,小石头将停在障碍物的旁边,被碰到的一个障碍物将消失。...
分类:
其他好文 时间:
2014-09-19 15:45:45
阅读次数:
202
第一种思路是:
dp(i):到位置i所需要的最少步数
dp(i)一定是递增的,所以从j=A[i]开始(从最远的位置开始),更新数组直到dp(j+i)
如果去掉,会TLE
int jump(int A[], int n) {
int* dp = new int[n];//dp[i]到i所需的最小步数
memset(dp, 0x3f, sizeof(int)...
分类:
其他好文 时间:
2014-09-16 01:38:29
阅读次数:
241
题目链接
题意:给你两个色子,如果可以通过旋转使两个色子的面一一对应相等(旋转规则题目给出),求最小步数,如果不行,输出-1。
思路:用BFS求最少步数。
代码:
#include
#include
#include
#include
#include
using namespace std;
const int MAXN = 6;
struct n...
分类:
其他好文 时间:
2014-09-14 23:44:37
阅读次数:
252
题目链接题意:4*4的黑白棋,求把棋全变白或者全变黑的最小步数。分析:以前用状态压缩做过。 和上题差不多,唯一的不同是这个终态是黑棋或者白棋,但是只需要把给的初态做不同的两次处理就行了。感觉现在还只是会套模板,不能独立的思考,好伤心。。。。 1 #include 2 #include 3 ...
分类:
其他好文 时间:
2014-08-19 10:52:44
阅读次数:
274
题目链接
题意:给出x和正整数n,问最少需要几次乘除法 可以得到n = x^m
思路:其实是关于指数的操作,即从1到m最少的步数。我们可以先确定最少步数m,然后进行迭代,迭代的过程也就是判断通过相加减所得到的数可以在m次操作中等于n,如果可以的话,m即为最小步数,如果不行的话,m++,进行下一次迭代。
代码:
#include
#include
#include...
分类:
其他好文 时间:
2014-08-17 21:27:12
阅读次数:
204
一开始想DP一步步迭代更新,求出到跳到最后一个的最小步数,但是时间复杂度O(nk),会超时。
再一想,发现该题只需要返回能否到达最后一个,不需要最小步数,所以迭代时候只需要保留当前能够走到的最远距离tmpMax,时间复杂度降到O(n)。
class Solution {
public:
const int MAXVALUE = 1 << 30;
bool canJump(int A[],...
分类:
其他好文 时间:
2014-07-26 15:30:51
阅读次数:
210
汉诺塔
汉诺塔II hdu1207:
先说汉若塔I(经典汉若塔问题),有三塔,A塔从小到大从上至下放有N个盘子,现在要搬到目标C上,
规则小的必需放在大的上面,每次搬一个,求最小步数。这个问题简单,DP:a[n]=a[n-1]+1+a[n-1],先把
上面的n-1个放在B上,把最大的放在目标C上,再把N-1个放回到C上即可。
网上的一种最优解法如下:(1)将x(1
#inc...
分类:
其他好文 时间:
2014-07-20 23:18:31
阅读次数:
272
迷宫的最短路径 代码(C++)本文地址: http://blog.csdn.net/caroline_wendy题目: 给定一个大小为N*M的迷宫. 迷宫由通道和墙壁组成, 每一步可以向邻接的上下左右四格的通道移动.请求出从起点到终点所需的最小步数. 请注意, 本题假定从起点一定可以移动到终点.使用宽度优先搜索算法(DFS), 依次遍历迷宫的四个方向, 当有可以走且未走过的方向时, 移动并且步数加...
分类:
编程语言 时间:
2014-07-17 21:02:38
阅读次数:
323
这同样是一道搜索题,所不同的是要搜索的图是三维的而不是二维的。但这并没什么大的改变,只是增加了两个搜索的方向而已。
要注意的地方是,所给出的起点终点的坐标是按照 列,行,层的顺序。
与DFS不同,BFS能保证所搜到的路径一定是最短路径,所以我们不需要维护一个多维(此处为3维)数组来记录访问到每一点的最小步数,只需要维护一个多维数组来标记是否走过就可以了。DFS中是要不停回溯来找最短路径的,但是BFS是不需要的。这是BFS本身的性质所决定的,BFS能保证第一次搜索到某一点时所走的路径就是到该点的最短路径。以后...
分类:
其他好文 时间:
2014-07-14 13:42:05
阅读次数:
181