Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 78527 | Accepted: 29187 |
Description
1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
Input
Output
Sample Input
5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
Sample Output
25
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <string> #include <math.h> #include <algorithm> #include <iostream> using namespace std; #define MAXN 111 int num[MAXN][MAXN]; int ans[MAXN][MAXN]; int n,m; int xx[4] = {-1,0,1,0}; int yy[4] = {0,1,0,-1}; int DFS(int x,int y){ if(ans[x][y] > 1){//如果这个点已经搜索过了就直接返回,不然会超时 return ans[x][y]; } int i; for(i=0;i<4;i++){ int dx = x + xx[i]; int dy = y + yy[i]; if(dx>=0 && dy<n && dy>=0 && dy<m && num[dx][dy]<num[x][y]){ int mmax = DFS(dx,dy); if(ans[x][y] < mmax+1){ ans[x][y] = mmax+1;//改点能取到的最大值 } } } return ans[x][y]; } int main(){ int i,j; while(~scanf("%d%d",&n,&m)){ for(i=0;i<n;i++){ for(j=0;j<m;j++){ scanf("%d",&num[i][j]); ans[i][j] = 1; } } int sum = -1; for(i=0;i<n;i++){ for(j=0;j<m;j++){ int mark = DFS(i,j); if(ans[i][j] > sum){ sum = ans[i][j]; } } } printf("%d\n",sum); } }
原文地址:http://blog.csdn.net/zcr_7/article/details/41704439