区间DP——AcWing 282. 石子合并

区间DP

定义

区间 DP 是动态规划的一种特殊形式,主要是在一段区间上进行动态规划计算。

运用情况

通常用于解决涉及在一段区间内进行操作、计算最优值等问题。比如计算一个区间内的最大子段和、最小分割代价等。一些常见的场景包括合并操作、划分操作等在区间上进行的任务。

注意事项

  • 要正确定义状态,通常状态会包含区间的起始点和结束点等信息。
  • 仔细考虑状态转移方程,确保涵盖所有可能的情况。
  • 注意边界条件的处理。

解题思路

  • 明确问题是可以转化为区间上的计算。
  • 设计合适的状态表示,例如用 dp[i][j] 表示区间 [i, j] 上的某种最优值。
  • 找出状态转移方程,即如何从较小的区间的最优值推导出较大区间的最优值。
  • 按照合适的顺序进行计算,通常是从小到大逐步计算出各个区间的最优值。

例如,对于计算一个区间的最大连续子段和问题,我们可以定义 dp[i][j] 为区间 [i, j] 的最大子段和,状态转移方程可能是 dp[i][j] = max(dp[i][j-1] + nums[j], nums[j])。然后通过两层循环遍历所有可能的区间来计算出最终结果。

AcWing 282. 石子合并  

题目描述

AcWing 282. 石子合并 - AcWing

运行代码

#include <iostream>
#include <cstring>
#include <climits>
using namespace std;
const int N = 305;
int dp[N][N];
int sum[N];
int stones[N];
int minCost(int l, int r) {if (dp[l][r]!= -1) {return dp[l][r];}if (l == r) {return 0;}int minVal = INT_MAX;for (int k = l; k < r; k++) {int cost = minCost(l, k) + minCost(k + 1, r) + sum[r] - sum[l - 1];minVal = min(minVal, cost);}dp[l][r] = minVal;return minVal;
}
int main() {int n;cin >> n;for (int i = 1; i <= n; i++) {cin >> stones[i];sum[i] = sum[i - 1] + stones[i];}memset(dp, -1, sizeof(dp));cout << minCost(1, n) << endl;return 0;
}

代码思路

  • const int N = 305;:定义了一个常量表示最多可能的石子堆数。

  • int dp[N][N];:这是用于存储区间 [l,r] 的最小合并代价的二维数组。

  • int sum[N];:用于计算前缀和,方便后续计算区间的石子质量总和。

  • int stones[N];:存储每堆石子的质量。

  • minCost 函数是核心函数,它通过递归和动态规划来计算区间 [l,r] 的最小代价:

    • 如果 dp[l][r] 已经计算过(不为 -1),则直接返回该值,避免重复计算。
    • 当区间只有一堆石子(l == r)时,代价为 0。
    • 然后通过遍历区间内的分割点 k,计算将区间分为两部分合并的代价,取其中的最小值。最后将计算得到的最小代价存储到 dp[l][r] 中。
  • 在 main 函数中:

    • 输入石子堆数 n 和每堆石子的质量。
    • 计算前缀和。
    • 将 dp 数组初始化为 -1
    • 调用 minCost(1,n) 计算并输出最终的最小代价。

改进思路

  1. 空间优化:可以观察到在计算过程中,实际上只需要用到当前正在计算的较小区间的 dp 值,可以考虑滚动数组等方式来减少空间复杂度。
  2. 预处理一些信息:比如提前计算好一些常见区间的和,避免在计算代价时重复计算。
  3. 并行计算:如果有合适的硬件环境,可以考虑对一些不相互依赖的计算部分进行并行化处理,提高计算效率。
  4. 更高效的状态转移:进一步分析问题特性,看是否能找到更简洁或更高效的状态转移方式。
  5. 添加错误处理:增加对输入数据的合法性检查等错误处理机制,使程序更加健壮。

其它代码

#include <iostream>
#define N 310
#define inf 0x3f3f3f3f
using namespace std;
int n;
int f[N][N], s[N];
int main()
{cin >> n;for(int i = 1; i <= n; i ++ ) cin >> s[i], s[i] += s[i - 1];    for(int len = 2; len <= n; len ++ )for(int l = 1; l + len - 1 <= n; l ++ ){int r = l + len - 1;f[l][r] = inf;for(int k = l; k < r; k ++ )f[l][r] = min(f[l][r], f[l][k] + f[k + 1][r] - s[l - 1] + s[r]);}  cout << f[1][n] << endl;    return 0;
}

代码思路

  • #define N 310 和 #define inf 0x3f3f3f3f:定义了常量表示最大可能的元素数量和一个较大的数值表示无穷大。
  • int n:表示元素的个数。
  • int f[N][N]:这个二维数组用于存储区间 [l,r] 的最小代价。
  • int s[N]:用于计算前缀和。

在 main 函数中:

  • 首先输入元素个数 n,并计算前缀和 s
  • 然后通过两个嵌套的循环来处理不同长度的区间:对于每个长度的区间,通过遍历可能的分割点 k,计算将区间分为两部分的代价,取最小值更新 f[l][r]。这里的代价计算是基于当前区间的分割代价以及前缀和来确定的。
  • 最后输出区间 [1,n] 的最小代价,即 f[1][n]

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

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

相关文章

夏季河湖防溺水新举措:青犀AI视频智能监控系统保障水域安全

近日一则新闻引起大众关注&#xff0c;有网友发布视频称&#xff0c;假期在逛西湖时&#xff0c;发现水面上“平躺”漂浮着一名游客在等待救援。在事发3分钟内&#xff0c;沿湖救生员成功将落水游客救到了岸边。 随着夏季的到来&#xff0c;雨水增多&#xff0c;各危险水域水位…

如何下载GoldWave 6.80软件及详细安装步骤

GoldWave功能介绍&#xff1a; GoldWave是一款很强大多功能数字音频编辑软件&#xff0c;可以用来消除某些音乐里边的噪音&#xff0c;可以用来声音编缉、播放、录制和转换还是多功能。它的音频特效有很多种可供选择。 GoldWave音频编辑软件与Windows其它应用软件一样&#x…

GaussDB技术解读——GaussDB架构介绍(四)

目录 11 GaussDB云原生架构 11.1 云原生关键技术架构 11.2 关键技术方案 11.2.1 通信组件 11.2.2 集群管理组件 11.2.3 多租组件 GaussDB架构介绍&#xff08;三&#xff09;从智能关键技术方案、驱动接口关键技术方案等方面对GaussDB架构进行了解读&#xff0c;本篇将…

SpringCloud:Feign远程调用

程序员老茶 &#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; P   S : 点赞是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#…

驾驭未来:智能网关如何革新车联网体验

车联网&#xff08;Internet of Vehicles&#xff09;是一个跨领域的技术综合体&#xff0c;它基于物联网&#xff0c;利用先进的信息通信技术实现车与车、车与路、车与人、车与服务平台等的全方位网络连接。 龙兴物联智能网关是集成了多协议、多接口&#xff0c;具有综合数据采…

[图解]建模相关的基础知识-11

1 00:00:00,700 --> 00:00:05,090 下一个知识点就是函数在集合上的限制 2 00:00:08,290 --> 00:00:10,200 符号可以这样来 3 00:00:10,210 --> 00:00:16,640 F然后一个往下的箭头A 4 00:00:16,650 --> 00:00:19,520 意思就是说F里面的元素 5 00:00:20,120 --&…

闭包表(Closure Table)

设计血缘关系&#xff08;data-lineage&#xff09;时&#xff0c;想到要使用的表模型。 表设计 节点记录表 - node CREATE TABLE lineages_node (name varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 节点名称,id bigint(20) unsigned NOT NULL AUTO_INCREM…

element--el-table合计换行显示

el-table合计换行显示 效果图实现1、使用到的参数2、代码演示 效果图 实现 1、使用到的参数 官网链接&#xff1a;element-table 将show-summary设置为true就会在表格尾部展示合计行。默认情况下&#xff0c;对于合计行&#xff0c;第一列不进行数据求合操作&#xff0c;而是…

【Python/Pytorch - 网络模型】-- SVD算法

文章目录 文章目录 00 写在前面01 基于Pytorch版本的SVD算代码02 理论知识 00 写在前面 &#xff08;1&#xff09;矩阵的奇异值分解在最优化问题、特征值问题、最小二乘方问题、广义逆矩阵问题及统计学等方面都有重要应用&#xff1b; &#xff08;2&#xff09;应用&#…

Sora和快手可灵背后的核心技术 | 3DVAE:通过小批量特征交换实现身体和面部的三维形状变分自动编码器

【摘要】学习3D脸部和身体生成模型中一个解开的、可解释的和结构化的潜在表示仍然是一个开放的问题。当需要控制身份特征时,这个问题尤其突出。在本文中,论文提出了一种直观而有效的自监督方法来训练一个3D形状变分自动编码器(VAE),以鼓励身份特征的解开潜在表示。通过交换不同…

数据结构(DS)C语言版:学习笔记(4):线性表

参考教材&#xff1a;数据结构C语言版&#xff08;严蔚敏&#xff0c;吴伟民编著&#xff09; 工具&#xff1a;XMind、幕布、公式编译器 正在备考&#xff0c;结合自身空闲时间&#xff0c;不定时更新&#xff0c;会在里面加入一些真题帮助理解数据结构 目录 2.1线性…

eNSP由于Cloud网卡设置错误引起的STP环路机制问题

现象&#xff1a;SW1和SW2之间直连&#xff08;vlan13&#xff09;不可达&#xff0c;但是断开左边的Cloud云的虚拟之后可达&#xff08;设置g0/0/1口为down) ,接口协议均up&#xff0c;配置正确。 查看生成树状态&#xff1a; 发现&#xff0c;SW2的g0/0/4接口为阻塞状态&…

[机器学习] Stable Diffusion初体验——基于深度学习通过神经网络的强大AI平台

文章目录 前言平台介绍 一.创建应用 Stable Diffusion WebUI初始化上传模型&#xff0c;VAE&#xff0c;lora 介绍sd模型&#xff0c;vae&#xff0c;lora模型进入应用文生图工作区调参区图生图 结语 前言 在这个信息爆炸的时代&#xff0c;AI技术正以前所未有的速度发展着。图…

微服务开发与实战Day07 - MQ高级篇

一、消息可靠性问题 首先&#xff0c;分析一下消息丢失的可能性有哪些。 消息从发送者发送消息&#xff0c;到消费者处理消息&#xff0c;需要经过的流程是这样的&#xff1a; 消息从生产者到消费者的每一步都可能导致消息丢失&#xff1a; 发送消息时丢失&#xff1a; 生产…

第二证券:新股“肉签”不断,今日两只申购!光伏巨头小伙伴来了

本周&#xff08;6月17日—6月21日&#xff09;&#xff0c;A股商场将迎来两只新股&#xff0c;分别为沪市主板的永臻股份和创业板的爱迪特&#xff0c;均将于本周一进行申购。 资料显现&#xff0c;永臻股份是国内领先的铝合金光伏结构件制造商&#xff0c;公司发行价为23.35…

俄罗斯方块小游戏(附源码)

游戏展示 一.导包 import turtle import random 二.定义一个Block类 定义一个Block类&#xff0c;用于表示游戏中的方块&#xff0c;包含颜色和形状。 class Block:def __init__(self, color, tiles):self.color colorself.tiles tiles三.定义了7个不同的Block对象 定义了7…

docker通过容器id查看运行命令;Portainer监控管理docker容器

1、docker通过容器id查看运行命令 参考&#xff1a;https://blog.csdn.net/a772304419/article/details/138732138 docker inspect 运行镜像id“Cmd”: [ “–model”, “/qwen-7b”, “–port”, “10860”, “–max-model-len”, “4096”, “–trust-remote-code”, “–t…

C# Winform内嵌窗体(在主窗体上显示子窗体)

在开发Winform项目中&#xff0c;经常会要切换不同的窗体。通常程序都有一个主窗体&#xff0c;在切换窗体时往往需要关闭其他子窗体&#xff0c;这个实例就来介绍MDI主窗体内嵌子窗体的实现方法。 MDI主窗体要设置一个比较重要的属性&#xff0c;IsMdiContainertrue。子窗体的…

论文阅读——ApeGNN- Node-Wise Adaptive Aggregation in GNNs for Recommendation

ApeGNN: Node-Wise Adaptive Aggregation in GNNs for Recommendation ApeGNN&#xff1a;GNN 中的节点自适应聚合以进行推荐 Abstract 近年来&#xff0c;图神经网络&#xff08;GNN&#xff09;在推荐方面取得了长足的进步。基于 GNN 的推荐系统的核心机制是迭代聚合用户-…

ThinkPHP 的老漏洞仍然被攻击者钟情

研究人员发现安全领域出现了令人不安的趋势&#xff1a;攻击者不仅对新披露的漏洞十分感兴趣&#xff0c;对已知的漏洞也丝毫不放过&#xff0c;尽管有些漏洞已经存在了好些年头&#xff0c;攻击者仍然能够通过老漏洞成功完成攻击。 典型的例子就是 ThinkPHP 远程代码执行漏洞…