同樣的解法C++通過,java就逾時。。。。。。求大牛解釋
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/* * POJ 滑雪問題 1088 */public class Main {static int [][] map;static int [][] height;static int r;static int c;static int [] ii = {-1,1,0,0};static int [] jj = {0,0,-1,1};static int dp(int x,int y){if(height[x][y]>0) return height[x][y];int max = 0;int t = 0;for(int i=0;i<4;i++){if(x+ii[i]>=0 && x+ii[i]<r && y+jj[i]>=0 && y+jj[i]<c && map[x][y]>map[x+ii[i]][y+jj[i]]){t = 1+dp(x+ii[i],y+jj[i]);if(t>max) max = t;}}return max;}//更直觀的寫法:static int dp2(int i,int j){if(height[i][j]>0) return height[i][j];int max = 0;int t = 0;if(j-1>=0 && map[i][j]>map[i][j-1]){t=dp(i,j-1)+1;max=(t>max)?t:max;}if(j+1<c && map[i][j]>map[i][j+1]){t=dp(i,j+1)+1;max=(t>max)?t:max;}if(i-1>=0 && map[i][j]>map[i-1][j]){t=dp(i-1,j)+1;max=(t>max)?t:max;}if(i+1<r && map[i][j]>map[i+1][j]){t=dp(i+1,j)+1;max=(t>max)?t:max;}return max;}public static void main(String args[]){try {BufferedReader in = new BufferedReader(new InputStreamReader(System.in));String [] line;line = in.readLine().split("\\s");r = Integer.parseInt(line[0]);c = Integer.parseInt(line[1]);map = new int[r][c];height = new int[r][c];for(int i=0;i<r;i++){line = in.readLine().split("\\s");for(int j=0;j<c;j++){map[i][j] = Integer.parseInt(line[j]);height[i][j] = 0;}}int rst = 0;for(int i=0;i<r;i++){for(int j=0;j<c;j++){int t = dp(i,j);rst = (t>rst)?t:rst;}}System.out.print(rst+1);} catch (IOException e) {}}}