Tony's Log

Algorithms, Distributed System, Machine Learning

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

DFS + Memorized Search (DP)

class Solution {
    int dfs(int i, int j, int row, int col, 
        vector<vector<int>>& A, vector<vector<int>>& dp)
    {
    if(dp[i][j] != 0) return dp[i][j];
        
    if (i > 0 && A[i-1][j] > A[i][j])
    {        
        dp[i][j] = max(dp[i][j], dfs(i - 1, j, row, col, A, dp));
    }
    if (i < row - 1 && A[i+1][j] > A[i][j])
    {
        dp[i][j] = max(dp[i][j], dfs(i + 1, j, row, col, A, dp));        
    }
    if (j > 0 && A[i][j-1] > A[i][j])
    {
        dp[i][j] = max(dp[i][j], dfs(i, j - 1, row, col, A, dp));
    }
    if (j < col - 1 && A[i][j+1] > A[i][j])
    {
        dp[i][j] = max(dp[i][j], dfs(i, j + 1, row, col, A, dp));
    }
    
    return ++dp[i][j];
    }
public:
    /**
     * @param A an integer matrix
     * @return  an integer
     */
    int longestIncreasingContinuousSubsequenceII(vector<vector<int>>& A) 
    {
        if (A.empty() || A[0].empty()) return 0;
    
    int ret = 0;
    int row = A.size();
    int col = A[0].size();
    
    vector<vector<int>> dp(row, vector<int>(col));
    
    for(int i = 0; i < row; i ++)
    for(int j = 0; j < col; j ++)
    {
        ret = max(ret, dfs(i, j, row, col, A, dp));
    }
    
    return ret;
    }
};
posted on 2015-11-16 03:45  Tonix  阅读(267)  评论(0编辑  收藏  举报