描述
7 38 810 2744 45265(图1)
图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。
注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右边的那个数。输入输入的是一行是一个整数N (1 < N <= 100),给出三角形的行数。下面的N行给出数字三角形。数字三角形上的数的范围都在0和100之间。输出输出最大的和。样例输入
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
样例输出
30
#include
#include
using namespace std;
int d[101][101];
//输入的是一行是一个整数N (1 < N <= 100)
int main()
{
int n;
cin >> n;
for (int i = 1;
i <= n;
++i)
for (int j = 1;
j <= i;
++j)
cin >> d[i][j];
int *p = d[n];
for (int i = n-1;
i>=1;
--i)
for (int j = 1;
j <= i;
++j)
p[j] = max(p[j], p[j + 1]) + d[i][j];
cout << p[1] << endl;
return 0;
}
【动态规划——数字三角形(百练ID2760)】
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构与算法|【算法】力扣第 266场周赛
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)
- 网络|简单聊聊压缩网络