【洛谷 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 7→3→8→7→5 的路径产生了最大权值。

输入格式

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

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

输出格式

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

样例 #1

样例输入 #1

复制代码
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

样例输出 #1

复制代码
30

提示

【数据范围】

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

题目翻译来自NOCOW。

USACO Training Section 1.5

IOI1994 Day1T1


思路

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

状态转移方程:

cpp 复制代码
dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + a[i][j];

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

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

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


AC代码

cpp 复制代码
#include <iostream>
#include <algorithm>
#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;
}
相关推荐
_OP_CHEN2 小时前
算法基础篇:(十一)贪心算法拓展之区间问题:从重叠到覆盖的最优解艺术
算法·贪心算法
Elias不吃糖2 小时前
NebulaChat:C++ 高并发聊天室服务端
开发语言·c++·redis·sql·项目文档
帅中的小灰灰2 小时前
C++编程策略设计模式
开发语言·c++·设计模式
钟智强2 小时前
线性映射(Linear Mapping)原理详解:机器学习中的数学基石
人工智能·算法·机器学习
是小胡嘛3 小时前
华为云CentOS系统中运行http服务器无响应
linux·服务器·c++·http·centos·华为云
福尔摩斯张4 小时前
C语言核心:string函数族处理与递归实战
c语言·开发语言·数据结构·c++·算法·c#
江澎涌4 小时前
JHandler——一套简单易用的 C++ 事件循环机制
android·c++·harmonyos
liu****4 小时前
5.C语言数组
c语言·开发语言·c++
毛甘木4 小时前
Unity MonoPInvokeCallback 使用教程
c++·unity
吗~喽4 小时前
【LeetCode】滑动窗口_水果成篮_C++
c++·算法·leetcode