首页 > 代码库 > poj 1088 滑雪

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 int dfs(int x,int y)13 {14     if(dp[x][y]) return dp[x][y];15     dp[x][y]=1;16     for(int i=0; i<4; i++)17     {18         int xx=x+dir[i][0];19         int yy=y+dir[i][1];20         if(xx>=1&&xx<=r&&yy>=1&&yy<=c&&g[x][y]>g[xx][yy])21         {22             dp[x][y]=max(dp[x][y],dfs(xx,yy)+1);23         }24     }25     return dp[x][y];26 }27 28 int main()29 {30     while(scanf("%d%d",&r,&c)!=EOF)31     {32         max1=-1;33         memset(dp,0,sizeof(dp));34         for(int i=1; i<=r; i++)35         {36             for(int j=1; j<=c; j++)37             {38                 scanf("%d",&g[i][j]);39             }40         }41         for(int i=1; i<=r; i++)42         {43             for(int j=1; j<=c; j++)44             {45                 if(dp[i][j]==0)46                 {47                     dfs(i,j);48                     max1=max(max1,dp[i][j]);49                 }50             }51         }52         printf("%d\n",max1);53     }54     return 0;55 }
View Code