线性dp之石子合并

设有 N堆石子排成一排,其编号为 1,2,3,…,N。

每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。

每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。

例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2堆,代价为 4,得到 4 5 2, 又合并 1、2堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;

如果第二步是先合并 2、3 堆,则代价为 7,得到 4 7,最后一次合并代价为 11,总代价为 4+7+11=22。

问题是:找出一种合理的方法,使总的代价最小,输出最小代价。

输入格式

第一行一个数 N 表示石子的堆数 N。

第二行 N 个数,表示每堆石子的质量(均不超过 1000)。

输出格式

输出一个整数,表示最小代价。

数据范围

1≤N≤300

输入样例:
4
1 3 5 2
输出样例:
22

思路:这里明确有个规则只能合并相邻的两堆石子,所以为dp问题,如果不要求只能合并相邻两堆石子,那么就是哈夫曼树的贪心问题。
        最后的那一堆也是由相邻的两堆合并而来,由此得到问题其实就是考虑两堆石子合并的所有可能,f(i,j)=min(f(i,j),f(i,k)+f(k+1,j)+s[j]-s[i-1]) 这个循坏就可以算出素有f(i,j)的合并中最小的那一个。

 

完整代码:

#include <iostream>
#include <cstring>
using namespace std;
const int N = 310;
int n, dp[N][N],s[N];int main() {/*memset(dp,0x3f,sizeof dp);memset(s,0,sizeof s);*/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 i = 1; i+len-1 <= n; ++i){int j=len+i-1;dp[i][j]=1e8;for(int k=i;k<j;k++){dp[i][j]= min(dp[i][k]+dp[k+1][j]+s[j]-s[i-1],dp[i][j]);}}}cout<<dp[1][n]<<endl;
}

 

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

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

相关文章

注册及搭建小程序开发环境

一、注册小程序账号 打开微信公众平台&#xff0c;通过邮箱注册小程序账号&#xff08;每个邮箱账号&#xff0c;只能注册一个小程序&#xff09;。 注册完成后&#xff0c;登录邮箱&#xff0c;打开激活地址&#xff0c;按照邮件提示&#xff0c;填写信息&#xff0c;激活账号…

MongoDB语言命令

文章目录 MongoDB shellMongoDB数据类型数据插入数据查询数据删除数据更新MongoDb数组更新和时间序列MongoDB特殊索引mongoDB权限设置 MongoDB shell 1、MongoDB用文档的形式存储数据&#xff0c;BSON的数据格式。 2、MongoDB与传统数据库相比&#xff0c;集合相当于表&#x…

springboot 任务执行和调度详细介绍

Spring Boot支持任务执行和调度&#xff0c;这可以通过Spring框架的TaskExecutor和TaskScheduler接口来实现。这些功能允许你异步执行任务和定时执行任务&#xff0c;这在处理批量作业、定时任务和异步服务时非常有用。 任务执行 Spring的TaskExecutor接口提供…

redis的hash数据结构底层简记

hash&#xff1a;k和v都是string的hash表。 HSET&#xff08;设置集合数据&#xff0c;4.0之前只能设置1个&#xff0c;之后可以设置多个&#xff09;&#xff0c;HSETNX(若k不存在则设置对应v)&#xff0c;HDEL&#xff08;删除指定kv&#xff0c;可以一次删除多个&#xff09…

Eclipse - 查看工程或者文件的磁盘路径

Eclipse - 查看工程或者文件的磁盘路径 1. Help -> Eclipse Marketplace -> Find: Explorer -> Eclipse Explorer 4.1.0 -> Install2. right-click -> Open in ExplorerReferences 1. Help -> Eclipse Marketplace -> Find: Explorer -> Eclipse Explo…

Java 中使用Collections类来反转集合的顺序

如何使用Collections类来反转集合的顺序 在Java中&#xff0c;Collections类提供了一些有用的静态方法&#xff0c;用于操作集合。然而&#xff0c;Collections类并没有直接提供反转集合顺序的方法。但是&#xff0c;你可以使用List接口中的Collections.reverse(List<?>…

门店数字化之旅:如何跨越那些难以逾越的鸿沟?

在数字化浪潮席卷全球的背景下&#xff0c;连锁门店运营正面临着一场深刻的变革。这场变革不仅关乎技术的升级&#xff0c;更涉及到商业模式、管理理念以及消费者体验的根本性转变。然而&#xff0c;在这场转型之路上&#xff0c;许多门店却常常遭遇各种痛点&#xff0c;让数字…

2023年总结与2024展望

今天是春节后上班第一天&#xff0c;你懂的&#xff0c;今天基本上是摸鱼状态&#xff0c;早上把我们负责的项目的ppt介绍完善了一下&#xff0c;然后写了一篇技术文章&#xff0c;《分布式系统一致性与共识算法》。接着就看了我近几年写的的年度总结&#xff0c;我一般不会在元…

一个服务器实现本机服务互联网化

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 一个服务器实现本机服务互联网化 前言痛点关于中微子代理实战演练搭建服务端搭建客户端服务端配置代理实现 前言 在数字世界的网络战场上&#xff0c;中微子代理就像是一支潜伏在黑暗中的数字特工队&…

自动化上位机开发C#100例:雷赛运动控制卡EtherCAT总线卡C#封装类

自动化上位机开发C#100例:雷赛运动控制卡EtherCAT总线卡C#封装类 文章目录 LTDMC.dll下载LTDMC.cs LTDMC.dll C#调用封装下载ICard.cs 运动控制卡接口Card.cs 运动控制卡抽象类CardLTDMC.cs 雷赛运动控制卡EtherCAT总线卡实现类CardList.cs 总线卡列表封装 LTDMC.dll下载 最新…

100天精通Python(实用脚本篇)——第116天:基于selenium实现反反爬策略之添加cookie登录网站

文章目录 专栏导读1. cookie是什么?2. cookie登录网站的优点?3. 浏览器怎么查看cookie?4. 代码获取cookie5. 添加cookie登录网站专栏导读 🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的…

【笔记------STM32】MX_RTC_Init()初始化RTC时RTC_ISR_INITF位超时失败的解决方法

RTC和flash有点像&#xff0c;有些功能需要解锁才能配置&#xff0c;虽然cubeMX生成的RTC部分的解锁配置正确&#xff0c;但却没有配置好前提条件&#xff1a;关闭PWR模块的备份域写保护使能&#xff0c;有点奇怪&#xff0c;手动关掉就好了 现象&#xff1a;进入RTC_EnterInit…

java数据结构与算法刷题-----LeetCode239. 滑动窗口最大值

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 1. 法一&#xff1a;指针法 解题思路 我们以每一个窗口来看&#xff0c;找…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(二)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型&#xff0c;由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”&#xff08;そら sora&#xff09;&#xff0c;即天空之意&#xff0c;以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

【软考中级备考笔记】数据的表示和校验码

2024/2/18 – 数据的表示和校验码 天气&#xff1a;阴雨 春节假期结束后第一个工作日&#xff0c;开始备考中级软件工程师。 希望在今年5月底的软考中取得中级证书 视频地址&#xff1a;https://www.bilibili.com/video/BV1Qc411G7fB 1. 计算机的总体架构 从下图中可以看出&am…

三防平板丨平板终端丨加固平板丨户外勘测应用

随着科技的不断发展&#xff0c;现代勘测业也在不断升级。相较于传统的勘测设备&#xff0c;三防平板在户外勘测中有着广泛的应用。那么&#xff0c;三防平板在户外勘测中究竟有哪些优势呢&#xff1f; 首先&#xff0c;三防平板具备极强的防水、防尘、防摔能力。在野外勘测中&…

应用管理中心架构的设计与实现

应用管理中心在现代软件开发中扮演着重要角色&#xff0c;它能够帮助开发团队有效管理和监控各种应用的运行情况。本文将介绍如何设计和实现一个高效、可靠的应用管理中心架构&#xff0c;以提升开发团队的工作效率和系统稳定性。 1. 架构概述 - 介绍应用管理中心的整体架构…

大页内存配置引发的数据库性能问题

问题背景: 用户来电报故障&#xff0c;他们一套正常运行的Oracle数据库&#xff0c;突然出现了10分钟左右的性能卡顿问题&#xff0c;期间全部的业务操作都变慢&#xff0c;他们通过查看问题期间的awr报告&#xff0c;发现数据库在问题时间出现大量的libary cache等待事件&…

金蝶K3-WISE与黑湖MES对接集成查询销售订单打通导入销售订单

金蝶K3-WISE与黑湖MES对接集成查询销售订单打通导入销售订单 接入系统&#xff1a;金蝶K3-WISE 金蝶K/3WISE是一款面向成长型企业&#xff0c;适应企业在快速成长过程中业务与管理的不断变化的信息化平台&#xff0c;实现云服务、ERP、物联网的融合&#xff0c;帮助企业从信息化…

每天分享一个Python库-Chardet

每天分享一个Python库-Chardet 前言 Python中有许多好用、有意思的库&#xff0c;有一些可以大大提高开发效率&#xff0c;有的可以为我们解决很多棘手的问题&#xff0c;从今天开始我会每天给大家分享一个Python库。今天分享的是一个跟字符串编码有关的库—chardet Chardet…