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

news2024/12/23 13:43:43

动态规划数字三角形模型

定义

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

运用情况

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

注意事项

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

解题思路

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

例如,在一个数字三角形中,要求从顶部到底部路径上数字之和最大。则状态可以定义为 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.coloradmin.cn/o/1860459.html

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

相关文章

OCR的有效数据增强

背景 我面临着需要尽可能准确识别手写金额的挑战。难点在于保持误判率低于0.01%。由于数据集中样本数量固定&#xff0c;因此数据增强是合乎逻辑的选择。快速搜索未发现针对光学字符识别&#xff08;OCR&#xff09;的现成方法。因此&#xff0c;我挽起袖子&#xff0c;亲自创建…

数据挖掘案例-商品零售购物篮分析

数据挖掘案例-商品零售购物篮分析 1. 背景与挖掘目标 现代商品种类繁多&#xff0c;顾客往往会由于需要购买的商品众多而变得疲于选择&#xff0c;且顾客并不会因为商品选择丰富而选择购买更多的商品。 例如&#xff0c;货架上有可口可乐和百事可乐&#xff0c;若顾客需要选…

「全新升级,性能更强大——ONLYOFFICE 桌面编辑器 8.1 深度评测」

文章目录 一、背景二、界面设计与用户体验三、主要新功能亮点3.1 高效协作处理3.2 共同编辑&#xff0c;毫无压力3.3 批注与提及3.4 追踪更改3.5 比较与合并3.6 管理版本历史 四、性能表现4.1 集成 AI 工具4.2 插件强化 五、用户反馈与使用案例 一、背景 Ascensio System SIA -…

服务器数据恢复—raid故障导致部分分区无法识别/不可用的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌DL380服务器中3块SAS硬盘组建了一组raid。 服务器故障&#xff1a; RAID中多块磁盘出现故障离线导致RAID瘫痪&#xff0c;其中一块硬盘状态指示灯显示红色。服务器上运行的数据库在D分区&#xff0c;备份文件存放在E分区。由于RAID瘫…

Git之checkout/reset --hard/clean -f区别(四十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

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

三、Python的数据类型 3.2 Python的组合数据类型 特点&#xff1a;表示多个元素的组合&#xff0c;可以包含不同类型的元素&#xff0c;甚至是其他的组合数据类型。 在内存中通常需要额外的空间来存储元素间的关系。 组合数据类型能够将多个同类型或不同类型的数据组织起来&a…

Centos+Jenkins+Maven+Git 将生成的JAR部署到远程服务器上

1、登录 没有安装的参考下面的安装步骤先安装: Jenkins安装手册 输入账号、密码登录系统。 2、新建任务 2.1 创建页面 1,“输入一个任务名称”; 2,任务类型点击“构建一个maven项目”; 3,点击“确定”,此时,构建任务创建完成。 2.2 General 1、描述:输入要部署…

热电发电机越来越受到研发关注

热电发电机 (TEG) 利用热量&#xff08;或更准确地说&#xff0c;温差&#xff09;和众所周知的塞贝克效应来发电。它们的应用范围从收集可用热能&#xff0c;尤其是在工业和其他情况下“浪费”的热能&#xff0c;到在放射性同位素热发电机 (RTG) 中使用航天器的放射性电源作为…

day45--RocketMQ(三)

1. 高级功能 1.1 消息存储 分布式队列因为有高可靠性的要求&#xff0c;所以数据要进行持久化存储。 消息生成者发送消息MQ收到消息&#xff0c;将消息进行持久化&#xff0c;在存储中新增一条记录返回ACK给生产者MQ push 消息给对应的消费者&#xff0c;然后等待消费者返回A…

离镜头5cm也能拍清?Pura 70 超聚光微距如何做到“贴脸拍摄”?

虽然微距摄影在手机上已经算不得什么新鲜的功能&#xff0c;但要把微距摄影拍出高质量的效果&#xff0c;还是具有挑战性的。 众所周知&#xff0c;在微距摄影领域&#xff0c;镜头离被拍摄物品越近&#xff0c;照片的解析力和细节就越突出。但对于器件来讲&#xff0c;对焦距离…

年入百万不是梦?小米汽车员工晒收入,揭秘行业高薪背后的真相!

近日&#xff0c;社交媒体上出现了一位小米汽车员工的“凡尔赛”发言&#xff0c;其晒出的收入水平引发了网友们的热议。 这份令人艳羡的薪资条&#xff0c;也让“小米汽车待遇”迅速登上了热搜榜。究竟是什么样的魔力&#xff0c;让这家造车新势力能够开出如此优渥的条件&…

linux与windows环境下qt程序打包教程

一、演示环境 qt5.14.2 二、Linux 2.1 关联依赖文件 2.1.1 下载打包工具 在Windows环境下可以使用 Qt Creator自带的官方工具进行打包&#xff0c;而Linux环境下没有官方工具&#xff0c;需要借助第三方工具才能打包。如&#xff1a;linuxdeployqt、CQtDeployer、AppImage…

薄冰英语语法学习--名词1-不规则的

昨天学了&#xff0c;规则的&#xff0c;就是加es&#xff0c;或者变y为i加es&#xff0c;以及加s,还有变f和fe为v加es 今天学不规则。不规则就是完全没有规则&#xff0c;和s和es没有关系。就写死了告诉你&#xff0c;这个词的复数就是这样写。要硬背的。 首先来自古代英语的…

【数据结构与算法】最短路径,Floyd算法,Dijkstra算法 详解

Floyd算法 for (int k 0; k < n; k) {for (int i 0; i < n; i) {for (int j 0; j < n; j) {if (d[i][k] ! INF && d[k][j] ! INF) {d[i][j] min(d[i][j], d[i][k] d[k][j]);}}} }Dijkstra算法&#xff08;基于最小堆&#xff09; void dijkstra(int st…

篮球联盟管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;球员管理&#xff0c;用户管理&#xff0c;球队管理&#xff0c;论坛管理&#xff0c;篮球资讯管理&#xff0c;基础数据管理 前台账户功能包括&#xff1a;系统首页&#xff0…

零基础STM32单片机编程入门(二)GPIO详解及驱动LED灯实战含源码视频

文章目录 一.概要二.STM32F103C8T6单片机GPIO口特点二.STM32单片机GPIO内部结构图三.单片机GPIO推挽输出信号流向四.单片机GPIO浮空输入信号流向四.单片机GPIO引脚的复用以及重映射五.CubeMX配置一个GPIO输出驱动LED灯例程六.CubeMX工程源代码下载七.讲解视频链接地址八.小结 一…

集成了工作流引擎的办公系统,直接开发OA,ERP,mes,srm,hrm(源码)

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…

基于Java超市库存管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

线上OOM问题排查总结

自己搭建了一个小博客&#xff0c;该文章与博客文章同步。 一般情况下&#xff0c;出现OOM主要有一下三种原因。 一次性申请对象的太多。更改申请对象数量。内存资源耗尽未释放。找到未释放的对象进行释放。本身资源不够。jmap -heap 查看堆信息。 分几种情况解决&#xff1…

基于FreeRTOS+STM32CubeMX+LCD1602+MCP4142(SPI接口)的数字电位器Proteus仿真

一、仿真原理图: 二、仿真效果: 三、STM32CubeMX配置: 1)、时钟配置: 2)、SPI配置: 3)、GPIO配置: 四、软件部分: 1)、主功能函数: void Task0_Function(void) { uint16_t buffer; uint8_t value[3]; buffer = M