滑雪

poj1088:http://poj.org/problem?id=1088

题意:给出矩阵地图,值为高度,找一条最长的高度递减的路径。
题解:动态记忆递归搜索,在递归最底层求出最优解,记录,自底向上的方式求出最优解。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 using namespace std;
 6 int map[102][102],cnt[102][102];
 7 int sum,temp,n,m;
 8 int DFS(int x,int y){
 9       int max1=0;
10        if(cnt[x][y]>0){
11              return cnt[x][y];
12              }
13     if(x>1&&map[x-1][y]<map[x][y]){
14       max1=max(max1,DFS(x-1,y));
15     }
16     if(x<n&&map[x+1][y]<map[x][y]){
17         max1=max(max1,DFS(x+1,y));
18     }
19     if(y>1&&map[x][y-1]<map[x][y]){
20     max1=max(max1,DFS(x,y-1));
21     }
22     if(y<m&&map[x][y+1]<map[x][y]){
23     max1=max(max1,DFS(x,y+1));
24     }
25     return cnt[x][y]=max1+1;
26 }
27 int main(){
28        scanf("%d%d",&n,&m);
29          memset(cnt,0,sizeof(cnt));
30     for(int i=1;i<=n;i++)
31       for(int j=1;j<=m;j++)
32          scanf("%d",&map[i][j]);
33        sum=0;
34     for(int i=1;i<=n;i++)
35        for(int j=1;j<=m;j++){
36               cnt[i][j]=DFS(i,j);
37                temp=cnt[i][j];
38                if(temp>sum)
39                  sum=temp;
40         }    
41     printf("%d\n",sum);     
42 }
View Code

 

posted on 2013-10-27 19:18  天依蓝  阅读(170)  评论(0编辑  收藏  举报

导航