南阳10Sking 类似poj1088

import java.io.BufferedInputStream;
import java.util.Scanner;
public class poj1088 {
static int vis[][];//应该每次初始化。。。。wa了好多次

public static void main(String[] args) {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
int n=cin.nextInt();
while(n-->0){
int r = cin.nextInt();
int c = cin.nextInt();
vis=new int [110][110];
int tem=0,max=0;
int a[][] = new int [110][110];
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
a[i][j]=cin.nextInt();
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++){
tem=f(a,a[i][j],i,j,r,c);
max=max>tem?max:tem;
//if(tem>max) max=tem;
}
System.out.println(max);
}
}
private static int f(int[][] ar, int a2, int i, int j,int r,int c) {
int max=0,tem=0;
if(i<1||j<1||i>r||j>c)
return 0;
if(vis[i][j]!=0)
return vis[i][j];
if(ar[i][j]>ar[i-1][j]){
tem=f(ar,ar[i-1][j],i-1,j,r,c);
max=tem;
}
if(ar[i][j]>ar[i+1][j]){
tem=f(ar,ar[i+1][j],i+1,j,r,c);
//if(tem>max) max=tem;
max=max>tem?max:tem;
}
if(ar[i][j]>ar[i][j-1]){
tem=f(ar,ar[i][j-1],i,j-1,r,c);
//if(tem>max) max=tem;
max=max>tem?max:tem;
}
if(ar[i][j]>ar[i][j+1]){
tem=f(ar,ar[i][j+1],i,j+1,r,c);
//if(tem>max) max=tem;
max=max>tem?max:tem;
}
return vis[i][j]=max+1;
}

}

原文地址:https://www.cnblogs.com/qjack/p/3248896.html