#include<stdio.h>
#include<string.h>
int r , c;
int h[105][105];
int dp[105][105];
int f(int i , int j){
int max = -1;
if(dp[i][j] != -1) return dp[i][j];
if(h[i - 1][j] < h[i][j] && i - 1 >= 0){
if(max < f(i - 1 , j)){
max = f(i - 1 , j);
}
}
if(h[i + 1][j] < h[i][j] && i + 1 < r){
if(max < f(i + 1 , j)){
max = f(i + 1 , j);
}
}
if(h[i][j - 1] < h[i][j] && j - 1 >= 0){
if(max < f(i , j - 1)){
max = f(i , j - 1);
}
}
if(h[i][j + 1] < h[i][j] && j + 1 < c){
if(max < f(i , j + 1)){
max = f(i , j + 1);
}
}
return dp[i][j] = max + 1;
}
int main(){
while(~scanf("%d%d" , &r , &c)){
memset(dp , -1 , sizeof(dp));
for(int i = 0 ; i < r ; i ++){
for(int j = 0 ; j < c ; j ++){
scanf("%d" , &h[i][j]);
}
}
for(int i = 0 ; i < r ; i ++){
for(int j = 0 ; j < c ; j ++){
f(i , j);
}
}
int maxx = -1;
for(int i = 0 ; i < r ; i ++){
for(int j = 0 ; j < c ; j ++){
if(maxx < dp[i][j]){
maxx = dp[i][j];
}
}
}
printf("%d\n" , maxx + 1);
}
return 0;
}
思路:简单DP...
代码: