蓝桥与力扣刷题(蓝桥 数字三角形)

news2025/3/9 23:39:13

题目:

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和(路径上的每一步只可沿左斜线向下或右斜线向下走)。

输入描述

输入的第一行包含一个整数 𝑁 (1≤𝑁≤100),表示三角形的行数。

下面的 𝑁 行给出数字三角形。数字三角形上的数都是 0 至 99 之间的整数。

输出描述

输出一个整数,表示答案。

输入输出样例

示例

输入

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

输出

30

解题思路+代码:

代码:

import java.util.Scanner;
// 1: 无需 package
// 2: 类名必须 Main, 不可修改

public class Main {
    static int[][] triangle; // 存储三角形数据
    static int[][] memo; // 记忆化存储
    static int n ; // 三角形的行数
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        n = scan.nextInt(); //获取三角形的行数
        triangle  = new int[n][n];
        memo = new int[n][n]; // 初始化缓存数组

        // 初始化 memo 数组
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                memo[i][j] = -1; // -1 表示未计算
            }
        }


        // 读取三角形数据
        for(int i = 0; i<n; i++){
            for(int j = 0; j<=i; j++){
                triangle[i][j] = scan.nextInt();
            }
        }

        scan.close();

        int sum = 0;

          // 计算最大路径和(暴力搜索)
         System.out.println(bruteForce(0,0));
    }

     /**
     * 递归暴力搜索,计算从 (i, j) 到底部的最大路径和
     */
    public static int bruteForce(int i,int j){
          // 递归出口:到底部时返回当前值
        if(i == n-1){
            return triangle[i][j];
        }

        // 如果已经计算过,直接返回
        if (memo[i][j] != -1) {
            return memo[i][j];
        }

         // 递归计算左右路径的最大值
        int left = bruteForce(i+1,j);
        int right = bruteForce(i+1,j+1);

        // 取最大值,并存入 memo 以备下次使用
        memo[i][j] = Math.max(left, right) + triangle[i][j];

        return memo[i][j];

    }
}

总结:这道题难度很大,可以用 动态规划(DP) 解决,也可以用 深度优先搜索(DFS)+ 记忆化搜索,或者 广度优先搜索(BFS) 解决,但 BFS 并不高效,因为BFS会遍历所有可能路径。我这里的解法是使用记忆化搜索(递归 + 缓存),因为尝试了暴力递归去解会运行超时,所以必须加上缓存,使用 memo[][] 记忆化数组,避免重复计算,将时间复杂度降为O(N^2)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏引擎学习第138天

仓库:https://gitee.com/mrxiao_com/2d_game_3 资产&#xff1a;game_hero_test_assets_003.zip 发布 我们的目标是展示游戏运行时的完整过程&#xff0c;从像素渲染到不使用GPU的方式&#xff0c;我们自己编写了渲染器并完成了所有的工作。今天我们开始了一些新的内容&#…

嵌入式学习L5D2-exec函数族和守护进程

exec函数族1 下面那个加了p环境变量就不用那个了。 输出的是系统 exec函数族2 后面不执行了 第二个参数瞎写也可以&#xff0c;但是要填 这里是说不想被替换&#xff0c;就在子进程里面执行这个。 守护进程概念 后台进程 守护进程是后台进程 一个fork了一个进程&#xff…

洛谷P1091

题目如下 思路 谢谢观看

行为模式---迭代器模式

概念 迭代器模式是设计模式的行为模式&#xff0c;它的主要设计思想是提供一个可以操作聚合对象&#xff08;容器或者复杂数据类型&#xff09;表示&#xff08;迭代器类&#xff09;。通过迭代器类去访问操作聚合对象可以隐藏内部表示&#xff0c;也可以使客户端可以统一处理…

【五.LangChain技术与应用】【29.LangChain Agent小案例1:智能代理的实战应用】

“为什么我的Agent总是处理不好实时数据?”“如何让AI自己调用API查股票?” 这些困扰开发者的问题,今天咱们用一个真实案例来彻底解决。不聊虚的,直接上手教你怎么用LangChain Agent造一个会自己查股价、算指标、生成报告的股票分析助手。全程高能,代码可直接复制粘贴到项…

windows部署spleeter 版本2.4.0:分离音频的人声和背景音乐

windows部署spleeter 版本2.4.0&#xff1a;分离音频的人声和背景音乐 一、Spleeter 是什么&#xff1f; Spleeter 是由法国音乐流媒体公司 Deezer 开发并开源的一款基于深度学习的音频分离工具。它能够将音乐中的不同音轨&#xff08;如人声、鼓、贝斯、钢琴等&#xff09;分…

dify + ollama + deepseek-r1+ stable-diffusion 构建绘画智能体

故事背景 stable-diffusion 集成进 dify 后&#xff0c;我们搭建一个小智能体&#xff0c;验证下文生图功能 业务流程 #mermaid-svg-6nSwwp69eMizP6bt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6nSwwp69eMiz…

pytorch3d学习(二)——安装与纹理显示demo测试

文章目录 零、安装一、渲染0. 导入模块1. 加载网格和纹理文件零、安装 参考了这篇文章:Pytorch3D Linux环境下安装(踩坑)记录 经历了红框子里面的步骤,然后测试一下官方给的代码,尝试一些 3D 算子,例如计算两个网格之间的倒角损失: from pytorch3d.utils import ico_s…

C语言基础之【指针】(下)

C语言基础之【指针】&#xff08;下&#xff09; 指针和字符串字符指针字符指针做函数参数const修饰的指针变量指针数组做为main函数的形参项目开发常用字符串应用模型while和do-while模型两头堵模型字符串反转模型 字符串处理函数strchr()strrchr()strstr()strtok()strcpy()st…

Redis--Hash类型

目录 一、引言 二、介绍 三、操作 1.HSET,HGET,HEXISTS,HDEL 2.HKEYS&#xff0c;HVALS 3.HGETALL&#xff0c;HMGET&#xff0c;HSAN 4.HLEN,HSETNX,HINCRBY,HINCRBYFLOAT 四、编码方式 1.ziplist&#xff08;压缩列表&#xff09; 2.hashtable&#xff08;哈希表&am…

大型语言模型训练的三个阶段:Pre-Train、Instruction Fine-tuning、RLHF (PPO / DPO / GRPO)

前言 如果你对这篇文章可感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 当前的大型语言模型训练大致可以分为如下三个阶段&#xff1a; Pre-train&#xff1a;根据大量可获得的文本资料&#…

共享模型之管程(悲观锁)

共享模型之管程&#xff08;悲观锁&#xff09; 文章目录 共享模型之管程&#xff08;悲观锁&#xff09;一、常见线程安全的类二、对象头三、Monitor&#xff08;监视器 / 管程&#xff09;四、偏向锁偏向锁的实现原理撤销偏向锁 五、轻量级锁轻量级锁的释放 六、重量级锁七、…

零基础C语言学习日志22(自定义类型:联合和枚举)

目录 联合体 联合体类型的声明 联合体的特点 相同成员联合体和结构体的对比 联合体大小的计算 例子 枚举类型 枚举类型的声明 枚举类型的优点 枚举类型的使用 联合体 联合体类型的声明 像结构体一样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成…

ROS2 Rviz 实战:给 panda 机械臂场景塞个圆柱体

视频讲解 ROS2 Rviz 实战&#xff1a;给 panda 机械臂场景塞个圆柱体 创建add_cylinder的package ros2 pkg create add_cylinder --build-type ament_cmake --dependencies rclcpp control_msgs moveit_ros_planning_interface 在src中添加add_cylinder.cpp&#xff0c;如下 #…

DeepSeek+知识库+鸿蒙,助力鸿蒙高效开发

不知道你们发现没有&#xff0c;就是鸿蒙开发官网&#xff0c;文档也太多太多了&#xff0c;对于新手来说确实头疼&#xff0c;开发者大多是极客&#xff0c;程序的目的是让世界更高效&#xff01;看文档&#xff0c;挺头疼的&#xff0c;毕竟都是理科生。 遇到问题不要慌&…

从零开始在Windows使用VMware虚拟机安装黑群晖7.2系统并实现远程访问

文章目录 前言1.软件准备2. 安装VMware17虚拟机3.安装黑群晖4. 安装群晖搜索助手5. 配置黑群晖系统6. 安装内网穿透6.1 下载cpolar套件6.2 配置群辉虚拟机6.3 配置公网地址6.4 配置固定公网地址 总结 前言 本文主要介绍如何从零开始在Windows系统电脑使用VMware17虚拟机安装黑…

【LeetCode101】对称二叉树

题目描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 思路与算法 对称&#xff1a;左右子树互为镜像 这很显然暗示了一种递归方法 确定base case&#xff08;s&#xff09; 如果 left 和 right 都是 None &#xff0c;那么它们是镜像的&#xff08;对称&…

K8s 1.27.1 实战系列(四)验证集群及应用部署测试

一、验证集群可用性 1、检查节点 kubectl get nodes ------------------------------------------------------ NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 3h48m v1.27.1 k8s-node1 Ready <none> …

【STM32】STM32系列产品以及新手入门的STM32F103

&#x1f4e2; STM32F103xC/D/E 系列是一款高性能、低功耗的 32 位 MCU&#xff0c;适用于工业、汽车、消费电子等领域&#xff1b;基于 ARM Cortex-M3&#xff0c;主频最高 72MHz&#xff0c;支持 512KB Flash、64KB SRAM&#xff0c;适合复杂嵌入式应用&#xff0c;提供丰富的…

pycharm找不到conda可执行文件

conda 24.9.2 在pycharm的右下角就可以切换python解释器了