1274:【例9.18】合并石子

【算法分析】

【算法分析】

首先我们要先读懂题意,可能有部分同学在读题的时候就有点难以理解。

我们首先来分析一个比较简单的问题,现在一共有三堆石头,每堆石子的数量分别是3,4,11。求合并成一堆石头的最小得分。
对于这个问题,只有两种选择:
前两堆石头合并再和第三堆石头合并。
3+4=7 ——> 7 石堆变为(7, 11)
7+11=18——>18 石堆变为(18)
cost=7+18=25
后两堆石头合并再和第一堆石头合并。
4+11=15——>15 石堆变为(3,15)
3+15=18——>18 石堆变为(18)
cost=15+18=33

易看出先合并前两堆的石子的花费比较小,不同的合并方式会造成不同的得分。同时可以发现这两种方法最后一次的得分就是石头的总数。

状态定义:s[i]表示前i堆石头的价值总和,第i堆到第j堆石子数量加和为s[j]-s[i-1]

f[i][j]表示把第i堆到第j堆的石头合并成一堆的最优值。将第i堆到第i堆合并为1堆,不需要操作,不会产生得分,得分为0。因此:f[i][i]=0

集合:将第i到第j堆石子合并为一堆的方案 在合为一堆时,第i到第j堆石子一定已经通过某种方案合并成了相邻的左右两堆。然后这两堆合为一堆,这次合并产生的得分为第i到第j堆石子数量的加和s[j]-s[i-1]。设一个k∈[i,j);  

    for (i=n-1; i>=1; i--)
      for (j=i+1; j<=n; j++)
        for (k=i; k<=j-1; k++)
          f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);

最后输出第1堆到第n堆合并能得到的最小分数f[1][n]

【参考代码】

#include<bits/stdc++.h>
using namespace std;
int f[101][101], s[101], n,i,j,k,x;
int main() {scanf("%d",&n);for (i=1; i<=n; i++) {scanf("%d",&x);s[i]=s[i-1]+x;}memset(f,0x3f,sizeof(f));  for (i=1; i<=n; i++) f[i][i]=0;   for (i=n-1; i>=1; i--)for (j=i+1; j<=n; j++)for (k=i; k<=j-1; k++)f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);printf("%d\n",f[1][n]);return 0;
}

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

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

相关文章

Hanlp自然语言处理如何再Spring Boot中使用

一、HanLP HanLP (Hankcs NLP) 是一个自然语言处理工具包&#xff0c;具有功能强大、性能高效、易于使用的特点。HanLP 主要支持中文文本处理&#xff0c;包括分词、词性标注、命名实体识别、依存句法分析、关键词提取、文本分类、情感分析等多种功能。 HanLP 可以在 Java、Py…

【LeetCode每日一题】2270.分割数组的方案数

https://leetcode.cn/problems/number-of-ways-to-split-array/description/ 题目&#xff1a; 给定一个数组&#xff0c;从 下标为 index 的地方切开&#xff0c;左边的数大于右边&#xff0c;保证右边至少有一个数。 思路一&#xff1a; 遍历数组&#xff0c;用prefixArr …

运用企业微信构建内部外部沟通桥梁的策略

随着互联网技术的普及和移动设备的广泛使用&#xff0c;企业微信作为企业内部协作和沟通的重要工具&#xff0c;发挥着越来越重要的作用。其中&#xff0c;企业微信的社群功能为信息的传播和交流提供了新的途径。通过建立活跃的企业微信社群&#xff0c;不仅可以加强员工之间的…

部署Nextcloud详细步骤及优化方法

一、安装PHP8.0以上 我这里使用PHP8.0.30 [rootlocalhost ~]# php -v PHP 8.0.30 (cli) (built: Aug 3 2023 17:13:08) ( NTS gcc x86_64 ) Copyright (c) The PHP Group Zend Engine v4.0.30, Copyright (c) Zend Technologies [rootlocalhost ~]# 安装方法参考 二、安装MY…

[算法基础 ~排序] Golang 实现

文章目录 排序什么是排序排序的分类1. 冒泡1.1 冒泡排序1.2. 快速排序 2. 选择2.1 简单选择排序2.2 堆排序 3. 插入3.1 直接插入3.2 折半插入3.3 希尔排序 4. 归并排序代码实现 5. 基数排序 排序图片就不贴了吧 排序 什么是排序 以下部分动图来自CSDN ::: tip 稳定性的概念 …

linux创建新用户

在Linux中&#xff0c;可以使用useradd命令来创建新用户。以下是创建新用户的基本步骤&#xff1a; 打开终端或命令行界面。输入以下命令并按下回车键创建新用户&#xff1a; sudo useradd -m -s /bin/bash username 其中&#xff0c;-m选项表示同时创建用户主目录&#xff…

【Kubernetes】存储类StorageClass

存储类StorageClass 一、StorageClass介绍二、安装nfs provisioner&#xff0c;用于配合存储类动态生成pv2.1、创建运行nfs-provisioner需要的sa账号2.2、对sa授权2.3、安装nfs-provisioner程序 三、创建storageclass&#xff0c;动态供给pv四、创建pvc&#xff0c;通过storage…

mysql:用SHOW COLUMNS FROM显示一个表的列信息

可以使用命令SHOW COLUMNS FROM table_name;显示一个表的列信息&#xff0c;例如&#xff1a;

Java se的语言特征之多态

目录 满足多态的条件动态绑定第一步动态绑定第二步动态绑定第三步参数列表,返回类型,访问修饰限定符区别有动态绑定,那是不是有静态绑定向下转型抽象类接口实现多个接口(先继承再接口,接口用",") 满足多态的条件 定义:去完成某个状态的时候,当不同的对象去完成的时候…

MTK Android13 user版本进入engineermode的Bluetooth测试项时闪退

平台&#xff1a;MT6771 android13 问题描述&#xff1a;进入到工模&#xff0c;点击进入Bluetooth测试项直接闪退 Log如下&#xff1a; 07-31 10:15:51.480 3605 3605 D EM/EmUtils: getEmAidlService ... 07-31 10:15:51.481 398 398 I servicemanager: Could not fin…

42、JSON 函数

目录 1. json 的两个常用方法 json.dumps()方法 &#xff1a;把python对象编码为json字符串 json.loads()方法&#xff1a;把json字符串编码成python对象 1. json 的两个常用方法 json 的存在有两种形式。 一种是&#xff1a;对象的形式存在&#xff0c;我们叫它 json 对象。…

36V H 桥有刷直流驱动芯片GC8870 GC8871 GC8872的数据选型分析

36V H 桥驱动芯片GC8870 GC8871 GC8872都可替代TI的DRV8870/8871/8872&#xff0c;宽电压&#xff0c;内置电荷泵&#xff0c;短地短电源保护&#xff0c;限流等功能&#xff0c;可应用于水泵&#xff0c;扫地机器人&#xff0c;开关等产品中

数据库系统 --- 关系模型

一、关系模型的数据结构以及形式化定义 1.关系 域&#xff1a;一组具有相同数据结构的值的集合。 笛卡尔积&#xff1a;域上的一种集合运算。多个集合做笛卡尔积的结果是每个集合取一个元素组合得到的一个新的集合。 域的基数&#xff1a;一个域上允许的不同取值的个数。 关系&…

mac 安装anaconda和lightgbm

mac安装anaconda不要去清华大学的anaconda的安装包列表去下载安装包, 去[官网](Free Download | Anaconda)下载, 清华的版本太老了, 老到脸conda 安装lightgbm都不只支持 安装好anaconda 后, 能用conda install xxx 的尽量不用pip install 其他的不知道, 用pip install ligh…

护眼台灯为什么护眼?适合备考使用的台灯推荐

台灯是大家生活中必不可少的一盏灯具&#xff0c;尤其是当夜幕降临时&#xff0c;许多仍然需要工作、或者学习的人&#xff0c;都要使用台灯来提供充足的照明环境。如今随着生活的高度发展&#xff0c;大家对台灯的要求也愈发精进了一步&#xff0c;不仅需要能够提供照明的&…

报表控件FastReport .NET v2024功能演示—更改图图片形状

报表生成器FastReport .NET 是适用于.NET Core 3&#xff0c;ASP.NET&#xff0c;MVC和Windows窗体的全功能报告库。使用FastReport .NET&#xff0c;您可以创建独立于应用程序的.NET报告。 FastReport .net下载&#xff08;qun&#xff1a;585577353&#xff09;https://www.e…

webpack的使用

一、5 大核心概念 entry&#xff08;入口&#xff09; 指示 Webpack 从哪个文件开始打包 output&#xff08;输出&#xff09; 指示 Webpack 打包完的文件输出到哪里去&#xff0c;如何命名等 loader&#xff08;加载器&#xff09; webpack 本身只能处理 js、json 等资源…

配电箱安全检查

配电箱怎么检查&#xff0c;如何识破电箱安全隐患&#xff1f; &#xff08;1&#xff09;一物一码&#xff1a;每个配电箱都有独一无二标识二维码&#xff0c;巡检人员到达现场扫码即可填写巡检记录&#xff0c;查看配电箱的参数、负责人、操作规则等信息&#xff1b; &#x…

如何用PHP写一个1688平台下的商品API接口代码?

一 定义 PHP&#xff08;全称&#xff1a;Hypertext Preprocessor&#xff09;是一种广泛用于开发Web应用程序的服务器端脚本语言。它是一种开源的编程语言&#xff0c;特别适用于快速构建动态网页和Web应用程序。 在PHP中&#xff0c;您可以使用1688商品API接口来获取和操作…

韵达速递查询,韵达速递单号查询,对需要的单号记录进行标记

批量查询韵达速递单号的物流信息&#xff0c;对需要的单号记录进行标记。 所需工具&#xff1a; 一个【快递批量查询高手】软件 韵达速递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左上角…