题解 | #最长上升子序列(一)#

滑雪

http://www.nowcoder.com/practice/36d613e0d7c84a9ba3af3ab0047a35e0

直接dfs+动态规划解决

#include<iostream>
#include<cstring>
using namespace std;
int graph[100][100],dp[100][100];
void dfs(int n,int m,int row,int col){
    //右
    if(col + 1 < m && graph[row][col + 1] < graph[row][col]){
        dfs(n,m,row,col + 1);
        dp[row][col] = max(dp[row][col + 1] + 1,dp[row][col]);
    }
    //下
    if(row + 1 < n && graph[row + 1][col] < graph[row][col]){
        dfs(n,m,row + 1,col);
        dp[row][col] = max(dp[row + 1][col] + 1,dp[row][col]);
    }
    //左
    if(col - 1 >= 0 && graph[row][col - 1] < graph[row][col]){
        dfs(n,m,row,col - 1);
        dp[row][col] = max(dp[row][col - 1] + 1,dp[row][col]);
    }
    //上
    if(row - 1 >= 0 && graph[row - 1][col] < graph[row][col]){
        dfs(n,m,row - 1,col);
        dp[row][col] = max(dp[row - 1][col] + 1,dp[row][col]);
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,m,ans = 0;
    cin >> n >> m;
    for(int i = 0;i < n;++i)
        for(int j = 0;j < m;++j){
            cin >> graph[i][j];
            dp[i][j] = 1;
        }
    for(int i = 0;i < n;++i)
        for(int j = 0;j < m;++j){
            dfs(n,m,i,j);
            ans = max(ans,dp[i][j]);
        }
    cout << ans;
}
全部评论

相关推荐

01-14 12:08
门头沟学院 Java
神哥了不得:(非引流)1.既然发出来了简历,就稍微提一点点小建议,确实简历很不错了,练手项目可以换一些质量高的,工作内容,可以加上一些量化指标,比如第一条系统响应速度由多少变成多少,减少了百分之多少,第4条就很不错。2.广投,年前实习招募比较少了
点赞 评论 收藏
分享
评论
7
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务