#include <stdio.h>
#define MAX(x,y) x>y?x:y
int arr[502][502], dp[502][502];
int n;
int dfs(int y, int x)
{
if(dp[y][x]) return dp[y][x];
dp[y][x] = dp[y][x] > 1 ? dp[y][x] : 1;
int val = 1, max = 1;
if(arr[y-1][x] > arr[y][x])
val = dp[y][x] + dfs(y-1, x), max = MAX(max, val);
if(arr[y][x+1] > arr[y][x])
val = dp[y][x] + dfs(y, x+1), max = MAX(max, val);
if(arr[y+1][x] > arr[y][x])
val = dp[y][x] + dfs(y+1, x), max = MAX(max, val);
if(arr[y][x-1] > arr[y][x])
val = dp[y][x] + dfs(y, x-1), max = MAX(max, val);
dp[y][x] = max;
return max;
}
int main()
{
int res=0;
scanf("%d", &n);
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
scanf("%d", &arr[i][j]);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
int val = dfs(i, j);
dp[i][j] = MAX(dp[i][j], val);
}
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
res = MAX(res, dp[i][j]);
printf("%d", res);
}
아하.. 이런식으로 풀으셧군요..
고맙습니다!