poj 1088 滑雪[zz] 记忆化搜索

原创 2012年03月27日 20:39:54

题意:给出一些高度,从一个位置划只能往周围四个方向滑,且高度递减。。求最长的滑行区域。  这道题应该是用DP做,但是没咋搞过DP所以也木有什么想法。。

在网上看可以用记忆化搜索做,记忆化搜索 = 搜索方式 + DP思想  ,大概的意思就是把已经搜过的节点状态保存起来,避免重复搜索的一种方法,有待理解加以应用。

代码中的step数组  就是  记录了从该点划的最长区域,当再搜到这个点的时候,就不用一直在搜到底,直接返回这个最优值就可以了。。

#include<iostream>
using namespace std;
int map[105][105];
int step[105][105];//存储了 从当前状态 滑 最长的区域距离 
int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int n , m;
int dfs(int x,int y) {
	int k , xx , yy , tmp;
	if (step[x][y]) return step[x][y];//如果这个状态存储了  那么直接返回
	tmp = 0;
	for (k = 0 ; k < 4 ; k ++) {
		xx = x + dir[k][0];
		yy = y + dir[k][1];
		if (map[xx][yy] < map[x][y]&&xx>=0&&xx<n&&yy>=0&&yy<m) {
			tmp = dfs(xx , yy);//从周围四个方向滑的  区域距离值
			step[x][y] = tmp>=step[x][y]?(tmp+1):step[x][y];//找出最大的tmp 也就是当前的最优决策 把这个点(x,y)的 step[x][y]
			                                                //赋值成 tmp + 1 
			//printf("x=%d y=%d  %d\n",x,y,step[x][y]);
		}	
	}
	return step[x][y];		
}
int main() {
	int i , j;
	while (scanf("%d%d",&n,&m)!=EOF) {
		for (i = 0 ; i < n ; i ++) 
			for (j = 0 ; j < m ; j ++)
				scanf("%d",&map[i][j]);
				int maxx = 0 ;
				int temp;
				memset(step,0,sizeof(step));
				for (i = 0 ; i < n ; i ++) {
					for (j = 0 ; j < m ; j ++) {
						temp = dfs(i , j);
						//printf("%d %d %d\n",i,j,temp);
						if (temp > maxx)
						maxx = temp;		
					}	
				}
				printf("%d\n",maxx + 1);	
	}	
}


蓝桥杯中一个最短路径问题

题目内容:  有5个城市(A,B,C,D,E),其中每个城市到其他城市的直达距离已知,两个城市之间只有一条公路。计算从  城市A到其他任意城市的最短路径距离。  输入描述 ...

Dijkstra算法(单元点最短路径)

Dijkstra算法解决图中某特定点到其他点的最短路径。 迪杰斯塔拉(Dijkstra)算法思想: 按路径长度递增的次序产生最短路径的算法。设集合S存放已经找到最短路径的顶点,V为所有节点的集合,...

poj 1088滑雪(记忆化搜索, dp)

滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 92465   Accepted: 34980 De...
  • CillyB
  • CillyB
  • 2016年09月21日 00:08
  • 192

Poj 1088 滑雪 (简单DP + 记忆化搜索)

题目链接:http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K...

POJ-1088-滑雪-解题报告-动态规划-记忆化搜索

在给出这道题的解题报告之前,先看下记忆化搜索的个人理解。 以最简单的递归求阶乘的函数进行说明。 常见的求阶乘的代码是这样的: int fac(int n) { if(n == 1) ret...
  • lihao21
  • lihao21
  • 2011年01月27日 18:38
  • 1494

poj 1088 滑雪(dfs记忆化搜索)

题目:http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submiss...

POJ 1088 滑雪 (记忆化搜索)

Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知...
  • wchhlbt
  • wchhlbt
  • 2016年03月28日 16:09
  • 163

POJ 1088 滑雪(动态规划+记忆化搜索)

//动态规划 + 记忆化搜索 #include #include const int nMax = 107; int R, C; int map[nMax][nMax]; int dp[nMax...

poj1088 滑雪 dp记忆化搜索 dfs深度优先搜索

滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 69216   Accepted: ...

poj 1088 滑雪 DP(dfs的记忆化搜索)

题目地址:http://poj.org/problem?id=1088   题目大意:给你一个m*n的矩阵 如果其中一个点高于另一个点 那么就可以从高点向下滑 直到没有可以下滑的时候 就得到一条下滑路...
  • Yreer
  • Yreer
  • 2017年05月02日 18:45
  • 109
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1088 滑雪[zz] 记忆化搜索
举报原因:
原因补充:

(最多只允许输入30个字)