#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 递增路径的最大长度
# @param matrix int整型二维数组 描述矩阵的每个数
# @return int整型
#
class Solution:
    def solve(self , matrix: List[List[int]]) -> int:
        # write code here
        mx=0
        n=len(matrix)
        m=len(matrix[0])
        dirs=[[1,0],[-1,0],[0,1],[0,-1]]
        memo=[[0]*m  for i in range(n)]
        def dfs(matrix ,row ,col,memo):
            # 已经计算
            if memo[row][col]!=0:
                return memo[row][col]

            # 对当前的计数+1 
            memo[row][col]+=1
            for dir in dirs:
                new_row=row+dir[0]
                new_col=col+dir[1] 
                if 0<=new_row<n and 0<=new_col<m and matrix[row][col]<matrix[new_row][new_col]:
                    memo[row][col]=max(memo[row][col],dfs(matrix,new_row,new_col,memo)+1)

            return memo[row][col] 
        for i in range(n):
            for j in range(m):
                mx=max(mx,dfs(matrix,i,j,memo))
        return mx