Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 69948 | Accepted: 25796 |
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
Source
/**************************************************** * author:crazy_石头 * Pro:POJ1088 * algorithm:记忆化搜索 * Time:32ms * Judge Status:Accepted *******************************************************/ #pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <vector> #include <algorithm> using namespace std; #define rep(i,h,n) for(int i=(h);i<=(n);i++) #define ms(a,b) memset((a),(b),sizeof(a)) #define eps 1e-6 #define INF 1<<29 #define LL __int64 const int maxn=100+20; int dp[maxn][maxn],map[maxn][maxn]; int n,m; inline int dfs(int x,int y) { if(dp[x][y])return dp[x][y]; int res=0; if((y+1<m)&&map[x][y]>map[x][y+1]) res=max(res,dfs(x,y+1)+1); if((y-1>=0)&&map[x][y]>map[x][y-1]) res=max(res,dfs(x,y-1)+1); if((x+1<n)&&map[x][y]>map[x+1][y]) res=max(res,dfs(x+1,y)+1); if((x-1>=0)&&map[x][y]>map[x-1][y]) res=max(res,dfs(x-1,y)+1); return dp[x][y]=res; } int main() { scanf("%d%d",&n,&m); rep(i,0,n-1) { rep(j,0,m-1) { scanf("%d",&map[i][j]); } } ms(dp,0); int ret=0; rep(i,0,n-1) { rep(j,0,m-1) { ret=max(ret,dfs(i,j)); } } printf("%d\n",ret+1); return 0; }