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

C++算法动态规划3

第 5 题 三角形顶部到底部的最小路径和

int minimumTotal(vector<vector<int>> &triangle)

题目描述
给出一个三角形,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字,
例如,给出的三角形如下:

[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
最小的从顶部到底部的路径和是 2 + 3 + 5 + 1 = 11。
注意:
如果你能只用 O(N)的额外的空间来完成这项工作的话,就可以得到附加分,其中 N 是三角形中的行总数。

自顶向下求解

#include <bits/stdc++.h>
using namespace std;
int minimumTotal(vector<vector<int>> &triangle) {//矩阵构造完成初始化 F(0,0)=triangle[0][0];vector<vector<int>> minPathSum(triangle);//矩阵的行数int row=triangle.size();for(int i=1; i<row; i++) {for(int j=0; j<=i; j++) {// F(i,0)if(j==0)minPathSum[i][j]=minPathSum[i-1][j]+triangle[i][0];// F(i,j)else if(j==i)minPathSum[i][j]=minPathSum[i-1][j-1]+triangle[i][0];// F(i,i)elseminPathSum[i][j]=min(minPathSum[i-1][j],minPathSum[i-1][j-1])+triangle[i][j];}}//min(F(row-1,j)int ret=minPathSum[row-1][0];for(int i=1; i<row; i++)ret=min(ret,minPathSum[row-1][i]);return ret;
}
int main() {vector<vector<int>> triangle = {{2},{3, 4},{6, 5, 7},{4, 1, 8, 3}};cout<<minimumTotal(triangle);return 0;
}

自底向上求解

 

#include <bits/stdc++.h>
using namespace std;
int minimumTotal(vector<vector<int>> &triangle) {//矩阵构造完成初始化 F(row-1,j)=triangle[row-1][j];vector<vector<int>> minPathSum(triangle);//矩阵的行数int row=triangle.size();//从最后一行开始向上推导 for(int i=row-2; i>=0; i--) {for(int j=0; j<=i; j++) {minPathSum[i][j]=min(minPathSum[i+1][j],minPathSum[i+1][j+1])+triangle[i][j];}}return minPathSum[0][0];
}
int main() {vector<vector<int>> triangle = {{2},{3, 4},{6, 5, 7},{4, 1, 8, 3}};cout<<minimumTotal(triangle);return 0;
}

http://www.xdnf.cn/news/911485.html

相关文章:

  • VUE前端实现自动打包成压缩文件
  • Linux缓冲区与glibc封装:入门指南
  • 智能生成完整 Java 后端架构,告别手动编写 ControllerServiceDao
  • 网络编程及原理(三)
  • 2025最新VMware17如何通过官网进行下载
  • [蓝桥杯]迷宫与陷阱
  • 端游如何反调试
  • 几何引擎对比:OpenCasCade、ACIS、Parasolid和CGM
  • 使用 FastMCP 构建你的第一个 MCP 服务:从零开始的 Python 示例
  • DAX权威指南8:DAX引擎与存储优化
  • 缓解骨质疏松 —— 补钙和补维 D
  • TeamCity Agent 配置完整教程(配合 Docker Compose 快速部署)
  • Steam 搬砖项目深度拆解:从抵触到真香的转型之路
  • 迈向群体智能-具身大小脑协作框架RoboOS及具身大脑RoboBrain
  • vim 替换 字符串 带 斜杠
  • 12-Oracle 23ai Vector 使用ONNX模型生成向量嵌入
  • RK3288项目(三)--linux内核之V4L2框架及ov9281驱动分析(上)
  • 手写muduo网络库(零):多线程中使用 weakptr 跨线程监听生命状态
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 8】【高通蓝牙hal-进程被杀之前日志收集流程】
  • jmeter之导出接口
  • 立定跳远-二分
  • 20250606-C#知识:委托和事件
  • 企业引入数字孪生,优化决策,提升市场竞争力的秘诀
  • 缓存一致性的形式化定义
  • UVM环境打印如何显示时间单位
  • 仿射变换、根据特征点进行仿射变换
  • HarmonyOS运动开发:如何用mpchart绘制运动配速图表
  • 计算与分析2-深度学习
  • F5 – TCP 连接管理:会话、池级和节点级操作
  • 嵌入式Linux下如何启动和使用Docker