• 【洛谷 P1216】[USACO1.5] [IOI1994]数字三角形 Number Triangles 题解(动态规划)


    [USACO1.5] [IOI1994]数字三角形 Number Triangles

    题目描述

    观察下面的数字金字塔

    写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。

    在上面的样例中,从 7 → 3 → 8 → 7 → 5 7 \to 3 \to 8 \to 7 \to 5 73875 的路径产生了最大权值。

    输入格式

    第一个行一个正整数 r r r ,表示行的数目。

    后面每行为这个数字金字塔特定行包含的整数。

    输出格式

    单独的一行,包含那个可能得到的最大的和。

    样例 #1

    样例输入 #1

    5
    7
    3 8
    8 1 0
    2 7 4 4
    4 5 2 6 5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    样例输出 #1

    30
    
    • 1

    提示

    【数据范围】
    对于 100 % 100\% 100% 的数据, 1 ≤ r ≤ 1000 1\le r \le 1000 1r1000,所有输入在 [ 0 , 100 ] [0,100] [0,100] 范围内。

    题目翻译来自NOCOW。

    USACO Training Section 1.5

    IOI1994 Day1T1


    思路

    ,使用一个二维数组 a 存储数字三角形的值,使用一个二维数组 dp 存储从顶点到每个位置的最大路径和。

    状态转移方程:

    dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + a[i][j];
    
    • 1

    在初始化 dp 数组时,dp[0][0] 赋值为 0。

    在每次状态转移时,判断上一行的相邻两个位置的最大值,加上当前位置的值,得到当前位置的最大路径和。

    最后,遍历最后一行的所有位置,取最大值即可。


    AC代码

    #include 
    #include 
    #define AUTHOR "HEX9CF"
    using namespace std;
    
    const int N = 1e3 + 5;
    
    int r;
    int ans;
    int a[N][N];
    int dp[N][N];
    
    int main()
    {
        cin >> r;
        for (int i = 1; i <= r; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                cin >> a[i][j];
            }
        }
        dp[0][0] = 0;
        for (int i = 1; i <= r; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + a[i][j];
            }
        }
        ans = 0;
        for (int j = 1; j <= r; j++)
        {
            // cout << dp[r][j] << endl;
            ans = max(ans, dp[r][j]);
        }
        cout << ans << endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    Mysql事务
    想知道怎样p漫画脸??用这两个方法,分分钟出片
    AI | 第1章 机器学习 Sklearn 入门笔记
    windows下安装protocol buffer
    Python环境的安装
    【讲座笔记】如何在稀烂的数据中做深度学习?
    Selenium——利用input标签上传文件
    在 SAP Fiori Gateway 系统配置一个指向 SAPGUI 事务的 tile
    ElasticSearch--分片和副本--原理
    DevSeo Studio设置中文界面
  • 原文地址:https://blog.csdn.net/qq_34988204/article/details/133551632