• HDU 2084 数塔 --- 入门DP


    HDU 2084 数塔

    从下往上递推,状态转移方程 dp[i][j] = max( dp[i+1][j], dp[i+1][j+1]) + a[i][j];

    /* HDU 2084 数塔 --- 入门DP */
    #include <cstdio>
    
    const int N = 105;
    int dp[N][N];
    
    int MAX(int a, int b){
        return a > b ? a : b;
    }
    
    int main()
    {
        #ifdef _LOCAL
            freopen("D:\input.txt", "r", stdin);
        #endif
        int t;
        scanf("%d", &t);
        while (t--){
            int n;
            scanf("%d", &n);
            for (int i = 1; i <= n; ++i){
                for (int j = 1; j <= i; ++j){
                    scanf("%d", &dp[i][j]);
                }
            }
            ////dp[i][j]记录从底部往上走到i,j的最大路径,最终结果和即dp[1][1]即为最长的路径
            //for (int i = 1; i <= n; ++i){
            //    //最后一行的dp初始化为a[i][j]本身的值;
            //    dp[n][i] = a[n][i];
            //}
    
            //状态转移方程: dp[i][j] = max(d[i+1][j] + dp[i+1][j+1]) + a[i][j]
            //即到达下一行的两个邻接点的最大值加上该点的值即为该点的最大值.
            for (int i = n - 1; i > 0; --i){
                //第i行有i个数,从下往上走,
                for (int j = 1; j <= i; ++j){
                    dp[i][j] = MAX(dp[i + 1][j], dp[i + 1][j + 1]) + dp[i][j];
                    //直接使用dp[i][j]可以省去一个数组的值
                    //dp[i][j] = MAX(dp[i + 1][j], dp[i + 1][j + 1]) + a[i][j];
                }
            }
            //从下往上递推可以省去最后一循环找最大值而直接去dp[1][1]
            printf("%d
    ", dp[1][1]);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    在Exchange 2013中重置用户密码
    在exchange邮箱服务器上启用反垃圾邮件功能
    EMC队列 发件人为空 From Address: <>
    zabbix删除历史记录
    ESXi 6.7 CVE-2018-3646警告的处理
    CentOS安装nmap端口查看工具
    webpack学习
    vscode 点滴
    chrome点滴
    前端资料汇总
  • 原文地址:https://www.cnblogs.com/tommychok/p/5079451.html
Copyright © 2020-2023  润新知