【洛谷 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 数组时,dp00 赋值为 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;
}
相关推荐
mCell4 小时前
Lua 编程入门:从基础语法到元表
javascript·算法·lua
wuyk5556 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无6 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
波特率1152006 小时前
C++新特性---属性说明符与标准属性
开发语言·c++
不会代码的小猴6 小时前
3. 控件学习1
开发语言·c++·笔记·qt·算法
203号居民8 小时前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
专注仿真10 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
evans在进步11 小时前
LeetCode 322:零钱兑换——Java 动态规划详解
java·leetcode·动态规划
烧酒同学11 小时前
【C++】记录size of std::vector的巧妙坑
开发语言·c++·图形渲染