动态规划数字三角形模型——AcWing 1015. 摘花生

动态规划数字三角形模型

定义

动态规划数字三角形模型是在一个三角形的数阵中,通过一定规则找到从顶部到底部的最优路径或最优值。

运用情况

通常用于解决具有递推关系、需要在不同路径中做出选择以达到最优结果的问题。比如计算最短路径、最大和等

注意事项

  • 正确定义状态表示,确保能涵盖所有可能情况且无冗余。
  • 注意边界条件的处理。
  • 确保递推关系的正确性和完整性。

解题思路

  • 确定状态:一般是用一个二维数组来表示在某个位置时的最优值。
  • 建立递推关系:根据问题的具体要求,找到从上层到下层每个位置的最优值与之前位置的关系。
  • 从顶部开始逐步计算,根据递推关系更新状态,最终得到底部的最优解。

例如,在一个数字三角形中,要求从顶部到底部路径上数字之和最大。则状态可以定义为 dp[i][j]表示到达第 i 行第 j 列位置时的最大和,递推关系可能是 dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]。通过从顶部向下依次计算状态,最终得到底部的最大和。

AcWing 1015. 摘花生

题目描述

1015. 摘花生 - AcWing题库

运行代码

#include <iostream>
#include <cstring>
using namespace std;
int dp[101][101];
int main() {
    int T;
    cin >> T;
    while (T--) {
        int R, C;
        cin >> R >> C;
        for (int i = 1; i <= R; i++) {
            for (int j = 1; j <= C; j++) {
                cin >> dp[i][j];
            }
        }
        for (int i = 1; i <= R; i++) {
            for (int j = 1; j <= C; j++) {
                dp[i][j] += max(dp[i - 1][j], dp[i][j - 1]);
            }
        }
        cout << dp[R][C] << endl;
    }
    return 0;
}

代码思路

  • 定义一个二维数组 dp[101][101] 来存储在每个位置能获得的最大花生数。
  • 对于输入的每组数据,先读取花生苗的行数 R 和列数 C,以及每行每列花生苗上的花生数量并存储到数组中。
  • 然后通过两个嵌套的循环遍历整个花生地。在每个位置 (i, j) ,通过比较从上方 (i - 1, j) 位置过来的最大花生数和从左方 (i, j - 1) 位置过来的最大花生数,取较大值加上当前位置的花生数,更新该位置的 dp[i][j] ,这就体现了动态规划的思想,即每个位置的最优值是基于之前已计算位置的最优值得到的。
  • 当遍历完整个花生地后,最后一行最后一列的 dp[R][C] 就是从西北角到东南角能摘到的最多花生数,输出即可。

改进思路

  1. 空间优化:可以观察到在计算过程中,实际上只需要当前行和上一行的信息,所以可以通过滚动数组的方式来减少空间复杂度,只使用两行的空间来进行计算。
  2. 输入优化:可以考虑对输入数据的读取进行一些优化,比如使用更快的输入流或采用更高效的输入处理方式。
  3. 异常处理:可以添加一些对输入数据合法性的检查和异常处理机制,以应对可能出现的不合法输入情况。

其它代码

#include <iostream>
#include <cstring>
using namespace std;
void run()
{
    int a[110][110], f[110][110];
    memset(a, 0, sizeof a);
    memset(f, 0, sizeof f);
    int r, c;
    cin >> r >> c;
    for(int i = 1; i <= r; i ++)
        for(int j = 1; j <= c; j ++)
            cin >> a[i][j];
    for(int i = 1; i <= r; i ++)
        for(int j = 1; j <= c; j ++)
            f[i][j] = max(f[i][j - 1], f[i - 1][j]) + a[i][j];
    cout << f[r][c] << endl;
}
int main()
{
    int t;
    cin >> t;
    while(t--) run();
    return 0;
}

代码思路

  • run 函数中:
    • 定义了两个二维数组 a 用于存储花生地中每个位置的花生数量,f 用于存储到达每个位置的最大花生数。
    • 通过 memset 对两个数组进行初始化清零。
    • 读取花生地的行数 r 和列数 c,并输入每个位置的花生数量到 a 中。
    • 然后通过两层循环,在每个位置 (i, j) ,通过比较从左边 (i, j - 1) 和上边 (i - 1, j) 过来的最大花生数,取较大值加上当前位置的花生数,更新 f[i][j],这体现了动态规划的递推过程。最后输出右下角 f[r][c] 的值,即从西北角到东南角能获取的最大花生数。
  • 在 main 函数中,读取测试用例的数量 t,然后逐个调用 run 函数进行处理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之复制(十一)

复制 复制的问题和解决方案 数据损坏或丢失的错误 当一个二进制日志损坏时&#xff0c;能恢复多少数据取决于损坏的类型&#xff0c;有几种比较常见的类型: 1.数据改变&#xff0c;但事件仍是有效的SQL 不幸的是&#xff0c;MySQL甚至无法察觉这种损坏。因此最好还是经常检查…

【小程序】聊天功能

文章目录 聊天功能实现功能实现思路后端前端效果展示 聊天功能 实现功能 要实现一个聊天机器人&#xff0c;它能够解答用户疑问&#xff0c;并且能够识别到用户聊天的主题&#xff0c;涉及到饮食方面时&#xff0c;会自动决定是否要去数据库中读取用户的相关喜好信息&#xf…

录音怎么转文字更高效?5款软件带你轻松拿捏文本转换~

临近大学生们最难熬的期末考试周&#xff0c;如何在短时间内复习完所有必考的科目也就成为大家迫在眉睫的首要任务。 想要在复习的过程中&#xff0c;更加高效地捕捉和整理关键信息、提高学习效率&#xff0c;那么录音转文字免费应用无疑是你的一大好帮手&#xff01; 倘若你…

YOLOv5改进 | SPPF | 具有多尺度带孔卷积层的ASPP【CVPR2018】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 改进涨点》专栏介绍 & 专栏目录 |目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、…

设计模式5-策略模式(Strategy)

设计模式5-策略模式 简介目的定义结构策略模式的结构要点 举例说明1. 策略接口2. 具体策略类3. 上下文类4. 客户端代码 策略模式的反例没有使用策略模式的代码 对比分析 简介 策略模式也是属于组件协作模式一种。现代软件专业分工之后的第一个结果是框架语音应用程序的划分。组…

WEB界面上使用ChatGPT

&#xff08;作者&#xff1a;陈玓玏&#xff09; 开源项目&#xff0c;欢迎star哦&#xff0c;https://github.com/tencentmusic/cube-studio 随着大模型不断发展&#xff0c;现在无论写代码&#xff0c;做设计&#xff0c;甚至老师备课、评卷都可以通过AI大模型来实现了&…

【数据结构与算法】动态查找表(二叉排序树,二叉平衡树)详解

二叉排序树的数据结构。 struct TreeNode {ElemType data;TreeNode *left, *right; }; using BiTree TreeNode *;结构体包含三个成员&#xff1a; data 是一个 ElemType 类型的变量&#xff0c;用于存储二叉搜索树节点的数据。left 是一个指向 TreeNode 类型的指针&#xff…

【Pandas驯化-16】一文搞懂Pandas中高性能query、eval函数技巧

【Pandas驯化-16】一文搞懂Pandas中高性能query、eval函数技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微信公众…

Linux命令学习2

一.文件基础命令 1.alias-给某个命令取别名 使用方式&#xff1a;alias cl ls -la 说明&#xff1a;将ls -la命令取别名为cl,使用这种方式只是临时将命令取别名&#xff0c;重启中断后&#xff0c;就会失效。 问题1&#xff1a;如何永久性的设置命令的别名&#xff1f; 答…

生命在于学习——Python人工智能原理(4.3)

三、Python的数据类型 3.1 python的基本数据类型 3.1.4 布尔值&#xff08;bool&#xff09; 在Python中&#xff0c;布尔值是表示真或假的数据类型&#xff0c;有两个取值&#xff0c;True和False&#xff0c;布尔值常用于控制流程、条件判断和逻辑运算&#xff0c;本质上来…

ONLYOFFICE 桌面编辑器 8.1全新发布,更强大的编辑工具

ONLYOFFICE 8.1 一、什么是ONLYOFFICE&#xff1f;二、怎么安装 ONLYOFFICE 8.1三、主要功能介绍四、总结 一、什么是ONLYOFFICE&#xff1f; ONLYOFFICE 是一款功能强大的办公套件&#xff0c;旨在提供全面的文档、表格和演示文稿编辑解决方案。它集成了文字处理、电子表格和演…

基于 Native 技术加速 Spark 计算引擎

本文整理自 2024 年 6 月 DataFunSummit 2024 OLAP 架构峰会 Lakehouse 湖仓一体化架构论坛的同名主题分享。 今天分享的主题是基于 Native 技术加速 Spark 计算引擎&#xff0c;大家将会了解到如何基于 ClickHouse 来改造 Spark 引擎&#xff0c;最终获得较为可观的性能提升。…

正则表达式以及文本三剑客grep、sed、awk

正则表达式匹配的是文本内容&#xff0c;文本三剑客都是针对文本内容。 grep&#xff1a;过滤文本内容 sed&#xff1a;针对文本内容进行增删改查 awk&#xff1a;按行取列 一、grep grep的作用使用正则表达式来匹配文本内容 1、grep选项 -m&#xff1a;匹配几次之后停止…

第10章 启动过程组 (启动过程组的重点工作)

第10章 启动过程组 10.3启动过程组的重点工作&#xff0c;在第三版教材第362~364页&#xff1b; 文字图片音频方式 第一个知识点&#xff1a;项目启动会议 1、作用 标志着对项目经理责权的定义结果的正式公布&#xff0c;通常由项目经理负责组织和召开。2、目的 使项目各…

2024 cicsn 西南赛区 半决赛

文章目录 前言mcmf结构定义添加边遍历邻接点示例场景解决步骤1. 初始化2. 应用SPFA找最小费用增广路径 3. 增广操作4. 终止条件 结果分析 逆向maincaldeladdedit 思路expvlunexp qeme启动不行保护逆向 题目给的脚本模版 前言 不能联网搜是真坐牢 本来想等着全写了再发的&#…

我终于毕业啦!

2024-6-24&#xff0c;星期一&#xff0c;19:21&#xff0c;天气&#xff1a;阴转小雨&#xff0c;心情&#xff1a;晴。大家好啊&#xff0c;“失踪人员”回归啦&#xff0c;整整断更了两周&#xff0c;这两周发生了很多事&#xff0c;第一件就是我的毕业答辩通过啦&#xff0…

python-题库篇-Python语言特性

文章目录 Python语言特性1 Python的函数参数传递2 Python中的元类(metaclass)3 staticmethod和classmethod4 类变量和实例变量5 Python自省6 字典推导式7 Python中单下划线和双下划线8 字符串格式化:%和.format9 迭代器和生成器10 *args and **kwargs11 面向切面编程AOP和装饰器…

Element 进度条样式优化

在开发后台管理系统时&#xff0c;经常会用到进度条这样一个控件&#xff0c;Element UI中提供了progress这样一个组件&#xff0c;如下图所示&#xff1a; 该组件默认的颜色会比较单一&#xff0c;为此时常需要对该组件的样式进行一些优化&#xff0c;以满足实际项目的需求。 …

【华为HCIA数通网络工程师真题-构建以太网交换网络】

华为HCIA数通网络工程师真题-构建以太网交换网络 一、1-10题 一、1-10题 1、如图所示&#xff0c;四台交换机都运行 STP&#xff0c;各种参数都采用默认值如果交换机C的G0/0/2端口发生阻塞并无法通过该端口发送配置 BPDU&#xff0c;则网络中 blocked 端口多久之后会进入到转发…

【Linux】动/静态库的创建和使用

目录 一、动/静态库的概念回顾&#xff1a; 二、动态库与静态库的区别&#xff1a; 三、静态库的创建与使用&#xff1a; 1、Linux静态库命名规则&#xff1a; 2、静态库的创建和使用&#xff1a; 四、动态库的创建与使用&#xff1a; 1、Linux动态库命名规则&#xff1…