赞
踩
#include <iostream> #include <stdio.h> using namespace std; int f[101][101]; int a[101][101]; int n = 0; int maxvalue(int a ,int b) { return (a>b)?a:b; } int dp(int i,int j) { int left = 1; int rigth = 1; int up = 1; int down = 1; int max = -10000; if(f[i][j]!= 0) return f[i][j]; else { if(i>1&& a[i-1][j]>a[i][j]) left +=dp(i-1,j); if(i<n&& a[i+1][j]>a[i][j]) rigth +=dp(i+1,j); if(j>1&& a[i][j-1]>a[i][j]) up += dp(i,j-1); if(j<n&&a[i][j+1]>a[i][j]) down+= dp(i,j+1); max = maxvalue(maxvalue(left,rigth),maxvalue(up,down)); } f[i][j] = max ; return f[i][j]; } int main() { while(scanf("%d",&n)!= EOF) { int i = 0; int j = 0; for( i = 1;i<= n;i++) for( j = 1;j<= n;j++) scanf("%d",&a[i][j]); for(i = 0;i<= n;i++) for(j =0 ;j<= n;j++) f[i][j] = 0; int ans = -10000; int k = 0; for(i = 1;i<=n;i++) for(j = 1 ;j<= n;j++) { k = dp(i,j); if(ans<k) ans = k; } printf("%d/n",ans); } return 0; }