【洛谷 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;
}
相关推荐
努力努力再努力wz3 分钟前
【MySQL 进阶系列】拒绝滥用root:从 mysql.user 到权限校验,带你彻底理解用户管理与授权机制!
android·c语言·开发语言·数据结构·数据库·c++·mysql
雪度娃娃15 分钟前
基于TCP的网络词典
网络·c++·tcp/ip·c#
生成论实验室32 分钟前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》第五章 事:行在时空中的具体化
人工智能·算法·架构·知识图谱·创业创新
Liangwei Lin42 分钟前
LeetCode 283. 移动零
算法
春蕾夏荷_7282977251 小时前
2、c++ acl tcp服务器客户端简单实例-服务器端(1)
服务器·c++·tcp/ip
墨染千千秋1 小时前
C++if判断的使用全解
c++
雪度娃娃1 小时前
设计模式——单例模式
开发语言·c++·设计模式
Lenyiin1 小时前
《LeetCode 顺序刷题》61 - 70
java·c++·python·算法·leetcode·lenyiin
岁岁的O泡奶1 小时前
NSSCTF_crypto_[LitCTF 2023]babyLCG
经验分享·python·算法·密码学·crypto·流密码
想唱rap1 小时前
应用层HTTPS协议
服务器·网络·c++·网络协议·http·https