• 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;
    }
    
  • 相关阅读:
    c3p0 空指针异常 com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    HTML02单词
    HTML01
    java JVM虚拟机
    线程范围内的数据共享
    电话面试
    IDEA快捷键
    Intellij IDEA 生成返回值对象快捷键
    IDEA 快捷将创建main函数
    模块
  • 原文地址:https://www.cnblogs.com/tomori/p/13623336.html
Copyright © 2020-2023  润新知