记忆搜索练习:Poj 1088题 滑雪

题目描述: http://poj.org/problem?id=1088

 1 #include<stdio.h>
 2
 3 int R,C;
 4 int max;
 5 int map[102][102];//记录每个区域的高度
 6 int dis[102][102];//记录每个区域的高度能够滑行的最远距离
 7 int book[102][102];//标记搜索过的点
 8
 9 int move[4][2]={0,1,1,0,-1,0,0,-1};
10
11 int DFS(int x,int y)//返回(x,y)能滑行的最远距离
12 {
13
14     int i;
15     int tx,ty;
16
17     int temp,max_temp=1;
18
19     if(dis[x][y]) return dis[x][y];
20
21     for(i=0;i<4;i++)
22     {
23
24         tx=x+move[i][0];
25         ty=y+move[i][1];
26
27         if(tx>R||ty>C||tx<1||ty<1||book[tx][ty]||map[tx][ty]>=map[x][y])
28             continue;
29
30         temp=1;
31         book[tx][ty]=1;
32
33         temp+=DFS(tx,ty);
34
35         if(temp>max_temp) max_temp=temp;
36
37         book[tx][ty]=0;
38
39     }
40
41     dis[x][y]=max_temp;
42
43     return max_temp;
44
45 }
46
47 int main(int argc,char* argv)
48 {
49
50     int i,j;
51     int temp;
52
53     while(scanf("%d%d",&R,&C)!=EOF)
54     {
55
56         max=1;
57
58         for(i=1;i<=R;i++)
59         {
60
61             for(j=1;j<=C;j++)
62             {
63
64                 scanf("%d",&map[i][j]);
65
66             }
67
68         }
69
70         for(i=1;i<=R;i++)
71         {
72
73             for(j=1;j<=C;j++)
74             {
75
76                 book[i][j]=1;
77
78                 temp=DFS(i,j);
79
80                 book[i][j]=0;
81
82                 if(temp>max) max=temp;
83
84             }
85
86         }
87
88         printf("%d\n",max);
89
90     }
91
92     return 0;
93
94 }
时间: 2024-09-15 19:39:20

记忆搜索练习:Poj 1088题 滑雪的相关文章

poj 1088 滑雪 【记忆化搜索】+【DFS】

策略:如题 题目链接:http://poj.org/problem?id=1088 代码: #include<stdio.h> #include<string.h> int map[105][105], dp[105][105], n, m; const int dir[4][2] = {0, 1, 1, 0, 0, -1, -1, 0}; //四个方向 int limit(int x, int y) //判断是不是越界了 { if(x<1||x>n||y<1||

POJ 1088 滑雪 (深搜)

题目链接:http://poj.org/problem?id=1088 题面: 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 83760   Accepted: 31349 Description Michael喜欢滑雪这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出

POJ 1088 滑雪(记忆化搜索)

滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 92384   Accepted: 34948 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17

POJ 1088 滑雪 记忆化优化题解

本题有人写是DP,不过和DP还是有点差别的,应该主要是记忆化 Momoization 算法. 思路就是递归,然后在递归的过程把计算的结果记录起来,以便后面使用. 很经典的搜索题目,这种方法很多题目考到的. 关键还是如何把代码写清晰工整了,O(∩_∩)O~. #include <stdio.h> const int MAX_N = 101; int R, C; int arr[MAX_N][MAX_N]; int tbl[MAX_N][MAX_N]; inline int max(int a,

poj 1088 滑雪

http://poj.org/problem?id=1088 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 int g[200][200]; 7 int dp[200][200]; 8 int r,c; 9 int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; 10 int max1=-1; 11 12

[ACM] poj 1088 滑雪 (记忆化搜索DFS)

求n*m网格内矩形的数目[ACM] poj 1088 滑雪 (记忆化搜索DFS),布布扣,bubuko.com

POJ 1088 滑雪 (动规)

滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 75664 Accepted: 28044 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17 18 1

POJ 搜索题集

poj1010--邮票问题 DFS poj1011--Sticks dfs + 剪枝 poj1020--拼蛋糕 poj1054--The Troublesome Frog poj1062--昂贵的聘礼 poj1077--Eight poj1084--Square Destroyer poj1085--Triangle War(博弈,極大極小搜索+alpha_beta剪枝) poj1088--滑雪 poj1129--Channel Allocation 着色问题 dfs poj1154--lett

poj水题-3062 超级水题的深层理解——代码简化

题目很简单,要求输入什么样输出什么样.以回车结束 这就是我用的C代码 #include <stdio.h> int main (){char p;for(;gets(&p);)puts(&p);return 0;} 使用了代码简化方案,我简化到了75B.有大神简化到31B,真想看看他们的源代码.我估计他们比我个能够了解语言规则. 这里不得不说一本叫<短码之美>的书.介绍了这道题.但我试过了,没用.可能系统升级了吧,必须要求C99. ,还听说不用#include也行,