poj 1088 滑雪 dp

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

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 int d[102][102],a[102][102];
 8 int dis[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
 9 int n,m;
10 int ok(int i,int j)
11 {
12     if(i>=0&&i<n&&j>=0&&j<m)
13         return 1;
14     return 0;
15 }
16 
17 int solve(int x,int y)
18 {
19     if(d[x][y]!=-1)
20         return d[x][y];
21     d[x][y]=1;
22     for(int i=0;i<4;i++)
23     {
24         int xx,yy;
25         xx=x+dis[i][0];  yy=y+dis[i][1];
26         if(ok(xx,yy)&&a[x][y]>a[xx][yy])
27         {
28             int temp;
29             temp=solve(xx,yy)+1;
30             if(d[x][y]<temp)
31                 d[x][y]=temp;
32         }
33     }
34     return d[x][y];
35 }
36 
37 int main()
38 {
39     while(~scanf("%d%d",&n,&m))
40     {
41         for(int i=0;i<n;i++)
42             for(int j=0;j<m;j++)
43                 scanf("%d",&a[i][j]);
44         memset(d,-1,sizeof(d));
45         int maxx=0;
46         for(int i=0;i<n;i++)
47         {
48             for(int j=0;j<m;j++)
49                 {
50                     d[i][j]=solve(i,j);
51                     if(maxx<d[i][j])
52                         maxx=d[i][j];
53                     //printf("%d  ",d[i][j]);
54                 }
55            // printf("
");
56         }
57         printf("%d
",maxx);
58     }
59     return 0;
60 }
原文地址:https://www.cnblogs.com/assult/p/3711624.html