zoukankan      html  css  js  c++  java
  • 898. 数字三角形

    经典dp问题

    自上向下dp

    数字三角形updown.PNG

    #include<iostream>
    #include<cstring>
    
    using namespace std;
    
    const int N = 510, INF = 0x3f3f3f3f;
    int f[N][N], a[N][N];
    int n;
    
    int main(){
        memset(f, 128, sizeof f);
        
        cin >> n;
        
        for(int i = 1; i <= n; i ++)
            for(int j = 1; j <= i; j ++)
                cin >> a[i][j];
                
        f[1][1] = a[1][1];
        
        for(int i = 2; i <= n; i ++)
            for(int j = 1; j <= i; j ++)
                f[i][j] = max(f[i - 1][j - 1], f[i - 1][j]) + a[i][j];
        
        int res = -INF;
        for(int i = 1; i <= n; i ++) res = max(res, f[n][i]);
        
        cout << res;
        
        return 0;
    }
    

    自下向上dp

    数字三角形downup.PNG

    #include<iostream>
    #include<cstring>
    
    using namespace std;
    
    const int N = 510;
    int f[N][N], a[N][N];
    int n;
    
    int main(){
        cin >> n;
        
        for(int i = 1; i <= n; i ++)
            for(int j = 1; j <= i; j ++)
                cin >> a[i][j];
            
        for(int i = n; i >= 0; i --) f[n][i] = a[n][i];
        
        for(int i = n - 1; i >= 1; i --)
            for(int j = 1; j <= i; j ++)
                f[i][j] = max(f[i + 1][j], f[i + 1][j + 1]) + a[i][j];
        
        cout << f[1][1];
        
        return 0;
    }
    

    记忆化搜索

    #include<iostream>
    #include<cstring>
    
    using namespace std;
    
    const int N = 510;
    int f[N][N], a[N][N], st[N][N];
    int n;
    
    int dfs(int x, int y){
        
        if(x == n) return a[x][y];
        
        if(!st[x][y]){
            st[x][y] = 1;
            f[x][y] = max(dfs(x + 1, y), dfs(x + 1, y + 1)) + a[x][y];
        }
        
        return f[x][y];
    }
    
    int main(){
        // memset(f, 128, sizeof f);
        
        cin >> n;
        
        for(int i = 1; i <= n; i ++)
            for(int j = 1; j <= i; j ++)
                cin >> a[i][j];
                
                
        cout << dfs(1, 1);
        
        return 0;
    }
    
  • 相关阅读:
    12306-单
    12306-票
    12306-车
    12306-人
    12306-目录
    a+=b 是什么意思?
    开启hadoop和Hbase集群的lzo压缩功能(转)
    HBase性能优化方法总结(转)
    Spark向HDFS中存储数据
    Spark从HDFS上读取JSON数据
  • 原文地址:https://www.cnblogs.com/tomori/p/13623336.html
Copyright © 2011-2022 走看看