算法竞赛(蓝桥杯)贪心算法1——数塔问题

题目描述

有如下所示的数塔,要求从底层走到顶层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

输入

输入数据首先包括一个整数整数 N (1≤N≤100),表示数塔的高度,接下来用 N 行数字表示数塔,其中第i 行有个i 个整数,且所有的整数均在区间 [0,99] 内。

输出

从底层走到顶层经过的数字的最大和是多少?

样例

输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出
30

题解

1. 导入必要的模块

没有导入任何模块,因为它使用了标准的输入输出函数 input()print()

2. 读取输入数据

Python复制

n = int(input())

这行代码读取一个整数 n,表示数字三角形的行数。

3. 初始化数字三角形

Python复制

a = []
for i in range(n):a.append(list(map(int, input().split())))

这段代码读取 n 行输入,每行包含若干个整数,构成数字三角形。这些整数被存储在一个二维列表 a 中。

4. 动态规划求解最大路径和

Python复制

for i in range(n-2, -1, -1):for j in range(i + 1):  # 确保遍历第i行的i+1个元素a[i][j] = max(a[i][j] + a[i+1][j], a[i][j] + a[i+1][j+1])

这段代码是动态规划的核心部分。它从倒数第二行开始,自底向上更新每一行的元素值。具体步骤如下:

  • 外层循环for i in range(n-2, -1, -1) 从倒数第二行开始,逐行向上遍历,直到第一行。

  • 内层循环for j in range(i + 1) 遍历当前行的每个元素。第 i 行有 i + 1 个元素。

  • 更新元素值a[i][j] = max(a[i][j] + a[i+1][j], a[i][j] + a[i+1][j+1]) 将当前元素 a[i][j] 与下一行的两个相邻元素 a[i+1][j]a[i+1][j+1] 中的较大值相加,更新 a[i][j]

5. 输出结果

Python复制

print(a[0][0])

最后,输出数字三角形顶部的元素 a[0][0],它包含了从顶部到底部的最大路径和。

示例

假设输入如下:

复制

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
  • n = 5 表示数字三角形有5行。

  • 数字三角形如下:

复制

     73 88 1 02 7 4 44 5 2 6 5

按照动态规划的步骤,我们从倒数第二行开始计算:

  • 第4行(倒数第二行):

    • a[3][0] = 2 + max(4, 5) = 2 + 5 = 7

    • a[3][1] = 7 + max(5, 2) = 7 + 5 = 12

    • a[3][2] = 4 + max(2, 6) = 4 + 6 = 10

    • a[3][3] = 4 + max(6, 5) = 4 + 6 = 10

  • 第3行:

    • a[2][0] = 8 + max(7, 12) = 8 + 12 = 20

    • a[2][1] = 1 + max(12, 10) = 1 + 12 = 13

    • a[2][2] = 0 + max(10, 10) = 0 + 10 = 10

  • 第2行:

    • a[1][0] = 3 + max(20, 13) = 3 + 20 = 23

    • a[1][1] = 8 + max(13, 10) = 8 + 13 = 21

  • 第1行:

    • a[0][0] = 7 + max(23, 21) = 7 + 23 = 30

最终,a[0][0] 的值为 30,表示从顶部到底部的最大路径和为 30。

总结

通过自底向上的动态规划方法,我们可以高效地求解数字三角形的最大路径和。这种方法的时间复杂度为 O(n^2),适用于处理较大规模的数字三角形。希望这篇文章能帮助你更好地理解这段代码的工作原理和实现细节。

 完整代码

a=[]
for i in range(n):a.append(list(map(int,input().split())))
for i in range(n-2,-1,-1):for j in range(i+1):# 确保遍历第j行有i个元素,因为range(0)无法进入循环a[i][j]=max(a[i][j]+a[i+1][j],a[i][j]+a[i+1][j+1])
print(a[0][0])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2304.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB学习笔记-table

1.在table中叠加table table 的每一列具有固定的数据类型。如果要让表的所有单元格都可以任意填充,就得让每一列都是 cell 类型,这样表中每个单元格都是“一个元胞”。创建时可以先构造一个 空 cell 数组(大小为行数列数)&#x…

RabbitMQ(三)

RabbitMQ中的各模式及其用法 工作队列模式一、生产者代码1、封装工具类2、编写代码3、发送消息效果 二、消费者代码1、编写代码2、运行效果 发布订阅模式一、生产者代码二、消费者代码1、消费者1号2、消费者2号 三、运行效果四、小结 路由模式一、生产者代码二、消费者代码1、消…

django在线考试系统

Django在线考试系统是一种基于Django框架开发的在线考试平台,它提供了完整的在线考试解决方案。 一、系统概述 Django在线考试系统旨在为用户提供便捷、高效的在线考试环境,满足教育机构、企业、个人等不同场景下的考试需求。通过该系统,用…

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)

本文介绍在Windows电脑中,下载、部署NVM(node.js version management)环境,并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法(https://blog.csdn.net/zhebushibiaoshi…

【Rust练习】28.use and pub

练习题来自:https://practice-zh.course.rs/crate-module/use-pub.html 1 使用 use 可以将两个同名类型引入到当前作用域中,但是别忘了 as 关键字. use std::fmt::Result; use std::io::Result;fn main() {}利用as可以将重名的内容取别名:…

React第二十二章(useDebugValue)

useDebugValue useDebugValue 是一个专为开发者调试自定义 Hook 而设计的 React Hook。它允许你在 React 开发者工具中为自定义 Hook 添加自定义的调试值。 用法 const debugValue useDebugValue(value)参数说明 入参 value: 要在 React DevTools 中显示的值formatter?:…

一体机cell服务器更换内存步骤

一体机cell服务器更换内存步骤: #1、确认grdidisk状态 cellcli -e list griddisk attribute name,asmmodestatus,asmdeactivationoutcome #2、offline griddisk cellcli -e alter griddisk all inactive #3、确认全部offline后进行关机操作 shutdown -h now #4、开…

VSCode连接Github的重重困难及解决方案!

一、背景: 我首先在github创建了一个新的项目,并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时,错误出现了 二、报错及解决方案: 1.解决方案: 需要在git上配置用…

JAVA安全—JWT攻防Swagger自动化Druid泄露

前言 依旧是Java安全的内容,今天主要是讲JWT这个东西,JWT之前讲过了,是Java中特有的身份校验机制,原理我就不再多说了,主要是看看它的安全问题,至于Swagger和Druid顺便讲一下。 Druid泄露 Druid是阿里巴…

Pytorch基础教程:从零实现手写数字分类

文章目录 1.Pytorch简介2.理解tensor2.1 一维矩阵2.2 二维矩阵2.3 三维矩阵 3.创建tensor3.1 你可以直接从一个Python列表或NumPy数组创建一个tensor:3.2 创建特定形状的tensor3.3 创建三维tensor3.4 使用随机数填充tensor3.5 指定tensor的数据类型 4.tensor基本运算…

CDP中的Hive3之Hive Metastore(HMS)

CDP中的Hive3之Hive Metastore(HMS) 1、CDP中的HMS2、HMS表的存储(转换)3、HWC授权 1、CDP中的HMS CDP中的Hive Metastore(HMS)是一种服务,用于在后端RDBMS(例如MySQL或PostgreSQL&a…

C#,图论与图算法,任意一对节点之间最短距离的弗洛伊德·沃肖尔(Floyd Warshall)算法与源程序

一、弗洛伊德沃肖尔算法 Floyd-Warshall算法是图的最短路径算法。与Bellman-Ford算法或Dijkstra算法一样,它计算图中的最短路径。然而,Bellman Ford和Dijkstra都是单源最短路径算法。这意味着他们只计算来自单个源的最短路径。另一方面,Floy…

Android中下载 HAXM 报错 HAXM installation failed,如何解决?

AMD芯片的电脑在 Android Studio 中安装 Virtual Device 时,经常会出现一个 问题 Intel HAXM installation failed. To install Intel HAXM follow the instructions found at: https://github.com/intel/haxm/wiki/Installation-Instructions-on-Windows 一直提示H…

少一点If/Else - 状态模式(State Pattern)

状态模式(State Pattern) 状态模式(State Pattern)状态模式(State Pattern)概述状态模式(State Pattern)结构图状态模式(State Pattern)涉及的角色 talk is c…

mayavi -> python 3D可视化工具Mayavi的安装

前言 Mayavi是一个基于VTK(Visualization Toolkit)的科学计算和可视化工具,主要用于数据可视化和科学计算领域。 它提供了一系列的高级可视化工具,包括2D和3D图形、表面和体积渲染、流场可视化等。Mayavi可以通过Python脚本进行调…

idea 自动导包,并且禁止自动导 *(java.io.*)

自动导包配置 进入 idea 设置,可以按下图所示寻找位置,也可以直接输入 auto import 快速定位到配置。 Add unambiguous imports on the fly:自动帮我们优化导入的包Optimize imports on the fly:自动去掉一些没有用到的包 禁止导…

BI 是如何数据分析的?

企业部署商业智能BI前,需要进行详细的分析,了解BI能为企业带来多少价值?如何提高工作效率的等等,今天我们就来聊一聊 BI 的工作原理。 一、BI的取数方式 商业智能BI是通过访问和连接业务系统数据源数据库的方式来进行取数的&…

宇泰串口卡驱动在Ubuntu22.04编译、安装汇总

从官网下载驱动官网地址 上传到Ubuntu, 目录结构如下: 驱动源代码: 驱动代码是基于开源项目编译来的 编译路径不能有中文路径,否则可能有类似错误 源码是基于Linux2.3内核编译,我当前是6.8.0-51,数据结构有升级,需要调…

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载 效果展示 使用方法 import LoadingText from "../components/LoadingText" import PageToRefresh from "../components/PageToRefresh" import FooterBar from "../components/…

上传自己的镜像到docker hub详细教程

上传自己的镜像到docker hub详细教程 本博客通B站视频一致: 上传自己的镜像到docker hub详细教程 1. 登录自己的hub.docker.com的账号 docker hub仓库 2. 点击Repositories,跳转到创建仓库页面 3. 点击Create a repository 创建repository&#xff0c…