码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-05-01 23:53:42      阅读:368      评论:0      收藏:0      [点我收藏+]

标签:ret   另一个   方向   clu   递推   printf   tin   分析   blog   

题目地址:http://poj.org/problem?id=1088

 

题目大意:给你一个m*n的矩阵 如果其中一个点高于另一个点 那么就可以从高点向下滑 直到没有可以下滑的时候 就得到一条下滑路径 求最大的下滑路径

 

分析:因为只能从高峰滑到低峰,无后效性,所以每个点都可以找到自己的最长下滑距离(只与自己高度有关)。记忆每个点的最长下滑距离,当有另一个点的下滑路径遇到这个点的时候,直接加上这个点的最长下滑距离。

dp递推式是,dp[x][y] = max(dp[x][y],dp[x+1][y]+1,dp[x][y-1]+1,dp[x-1][y]+1,dp[x][y+1]+1);

 

 1 #include<cstdio>
 2 #include<queue>
 3 #include<algorithm>
 4 //dp[x][y]表示 (x,y)这个点的最长下滑路径
 5 using namespace std;
 6 const int maxn = 102;
 7 using namespace std;
 8 int n, m,bx,by,ans;
 9 int G[maxn][maxn];
10 int dp[maxn][maxn];
11 int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//这种图的搜索 可以把方向写在一个数组中 使代码更简洁
12 int dfs(int x, int y)
13 {
14     if(dp[x][y])//如果之前已经有结果 那么直接使用
15     {
16         return dp[x][y];
17     }
18     for(int i = 0; i < 4;i++)
19     {
20         int tx = x,ty = y;
21         tx += dir[i][0];
22         ty += dir[i][1];
23 //        下面2个if都是排除非法情况
24         if(tx < 0 || tx >= n || ty < 0 || ty >= m) continue;
25         if(G[tx][ty] >= G[x][y]) continue;
26 //        如果四周的点都比自己高 或者路径长没自己长 那么不更新 否则更新为四周的点+1
27         dp[x][y] = max(dp[x][y],dfs(tx,ty)+1);
28     }
29     return dp[x][y];
30 
31 }
32 int main()
33 {
34 
35     scanf("%d %d", &n,&m);
36     for(int i = 0;i < n; i++)
37     {
38         for(int j = 0; j < m; j++)
39         {
40             scanf("%d", &G[i][j]);
41 
42         }
43     }
44     ans = 0;
45     for(int i =0; i < n; i++)
46     {
47         for(int j = 0; j < m; j++)
48         dfs(i,j);
49     }
50     for(int i =0; i < n; i++)
51     {
52         for(int j = 0; j < m; j++)
53          ans = max(ans,dp[i][j]);
54     }
55     printf("%d",ans+1);//因为自己也算做一步 所以ans+1
56 
57     return 0;
58 }

 

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

标签:ret   另一个   方向   clu   递推   printf   tin   分析   blog   

原文地址:http://www.cnblogs.com/Jadon97/p/6793369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!