当前位置: 首页 > news >正文

第九章-数字三角形

数字三角形问题

给定一个数字三角形(通常是一个二维数组或类似结构),例如:

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

你从顶部出发,每次可以向下走左下右下的相邻数字,到达底部,求出从顶部到底部的路径上数字之和的最大值

解:

设三角形有 nn 行,用 a[i][j]a[i][j] 表示第 ii 行、第 jj 列的数字(从 0 开始计数,且第 ii 行有 i+1i+1 个数)。

定义:dp[i][j]=从位置 (i,j) 出发到达最底层的最大路径和

状态转移方程(自底向上): dp[i][j]=a[i][j]+max⁡(dp[i+1][j], dp[i+1][j+1])

边界条件: dp[n−1][j]=a[n−1][j]

最后答案 = dp[0][0]

#include<bits/stdc++.h> using namespace std; int maxSum(vector<vector<int>>& b) { int n = b.size(); if (n == 0) return 0; // 只需要一维数组存储当前行的dp值 vector<int> dp(b[n-1].begin(), b[n-1].end()); // 自底向上更新 for (int i = n-2; i >= 0; i--) { for (int j = 0; j <= i; j++) { dp[j] = b[i][j] + max(dp[j], dp[j+1]); } } return dp[0]; } int main(){ vector<vector<int>> a = { {7}, {3, 8}, {8, 1, 0}, {2, 7, 4, 4}, {4, 5, 2, 6, 5} }; // 最大路径和 int max = maxSum(a); cout << "最大路径和: " << max << endl; }

三角形: DP表:
7 30
3 8 23 21
8 1 0 20 13 10
2 7 4 4 7 12 10 10
4 5 2 6 5 4 5 2 6 5

最大路径和: 30
路径: 7 -> 3 -> 8 -> 7 -> 5

http://www.jsqmd.com/news/356100/

相关文章:

  • AtCoder Beginner Contest 444 ABCDE 题目解析
  • Electron 应用中的系统检测方案对比 - 教程
  • 《Ionic Range:深度解析与使用指南》
  • Python3 SMTP发送邮件教程
  • 数字图像处理篇---图像锐化
  • 数字图像处理篇---图像模糊
  • 基于SpringBoot的网购平台管理系统毕业设计源码
  • jQuery 隐藏/显示
  • 深度解析 Elasticsearch:从倒排索引到 DSL 查询的实战突围
  • C 标准库 - `<float.h>`
  • HiBit Startup Manager(启动项优化工具)
  • AI写论文测评来啦!4款AI论文生成工具,优劣一目了然!
  • SnailJob发布任务类型详解
  • Listary Portable
  • AI写论文别发愁,4款AI论文写作神器 让毕业论文撰写不再是难事!
  • 多平台解压缩工具
  • Intellij IDEA使用
  • Lizard Systems Wi-Fi Scanner
  • C++ 数组
  • 防止自己被算法困在信息茧房里的搜索小技巧
  • 【比赛总结】AtCoder Beginner Contest 444 A~E 总结
  • 目前市场上哪些回收平台对大额京东e卡交易最可靠? - 京顺回收
  • 桌面增强工具 TaskbarPlus
  • 别再让 ES 把你拖垮!5 个实战技巧让搜索性能提升 10 倍
  • XSLT 浏览器
  • AI写论文宝藏来袭!这4款AI论文生成工具,职称论文写作不用愁!
  • AI原生应用与语音识别的创新结合模式
  • 计算机等级考试—高频英语词汇—东方仙盟练气期
  • 基于SpringBoot的车联网位置信息管理软件毕设源码
  • AI写论文的利器!4款AI论文生成工具,解决期刊论文写作难题