1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <math.h> 4 #include <algorithm> 5 #include <stdlib.h> 6 #include <vector> 7 #include <map> 8 #include <queue> 9 #include <string> 10 #include <iostream> 11 #include <ctype.h> 12 #include <string.h> 13 #include <set> 14 #include <stack> 15 #include<functional> 16 using namespace std; 17 #define size 105 18 #define maxn 1<<30 19 int dp[size][size];//以i,j为结尾的线段所滑行的最大距离 20 int a[size][size]; 21 int row, col; 22 int go[4][2] = { 1, 0, 0, 1, -1, 0, 0, -1 }; 23 int solve(int x, int y){//表示以x,y结尾的点所滑翔的最大距离,从最低点往上收敛 24 if (dp[x][y] != -1) return dp[x][y]; 25 int ret = 1; 26 for (int i = 0; i < 4; i++){ 27 int tx = x + go[i][0]; 28 int ty = y + go[i][1]; 29 if (tx < 1 || ty<1 || tx>row || ty>col) continue; 30 if(a[x][y]<a[tx][ty]) ret = max(ret, solve(tx, ty)+1); 31 } 32 dp[x][y] = ret; 33 return ret; 34 } 35 int main(){ 36 cin >> row >> col; 37 for (int i = 1; i <= row; i++) 38 for (int j = 1; j <= col; j++){ 39 dp[i][j] = -1; 40 cin >> a[i][j]; 41 } 42 int ans = 1; 43 for (int i = 1; i <= row; i++) 44 for (int j = 1; j <= col; j++) 45 ans = max(ans, solve( i, j)); 46 cout << ans << endl; 47 system("pause"); 48 return 0; 49 }