AC code:
//package adruill;
import java.util.Scanner;
public class Main{
public static int dp[][] = new int[105][105],data[][] = new int[105][105];
public static int dir[][] = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};//静态成员
public static int r, c;
public static void main(String[] agrs){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
r = in.nextInt();
c = in.nextInt();
if(r == 0 && c == 0)
break;
for(int i = 1; i <= r; i++){
for(int j = 1; j <= c; j++)
{
data[i][j] = in.nextInt();
dp[i][j] = 1; //初始化1
}
}
int ans = 0;
for(int i = 1; i <= r; i++){
for(int j = 1; j <= c; j++)
ans = Math.max(ans, Main.dfs(i, j));
}
System.out.println(ans);
}
in.close();
}
public static boolean judge(int x, int y){
if(x < 1 || x > r || y < 1 || y > c)
return false;
return true;
}
public static int dfs(int x, int y){
int ans = dp[x][y]; //记忆化搜索
if(ans > 1)
return ans;
ans = 1;
for(int i = 0; i < 4; i++){
int fx = x + dir[i][0];
int fy = y + dir[i][1];
if(judge(fx, fy) && data[fx][fy] < data[x][y]){ //dfs
ans = Math.max(ans, 1 + dfs(fx, fy));
}
}
return dp[x][y] = ans;
}
}