在一个矩阵内求一个最长上升子序列
给你一个 n *m 的矩阵,求这个矩阵内部的最长上升子序列
记忆化去dp即可
在深搜的过程中去记忆化dp
int dp[2005][2005]; int dfs(int x, int y){ if (dp[x][y]) return dp[x][y]; int maxth = 1; for(int i = 0; i < 4; i++){ int fx = x+dir[i][0]; int fy = y+dir[i][1]; if (fx < 1 || fx > n || fy < 1 || fy > m || mp[fx][fy] <= mp[x][y]) continue; int len = dfs(fx, fy)+1; if (maxth < len) maxth = len; } dp[x][y] = maxth; return maxth; } void solve() { int ans = 0; for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ int lenth = dfs(i , j); ans = max(ans, lenth); } } printf("%d\n", ans); }
东北日出西边雨 道是无情却有情