洛谷 P5569 石子合并——题解

news/2024/12/25 20:56:05/文章来源:https://www.cnblogs.com/qc0817/p/18420354

洛谷P5569题解


传送锚点


摸鱼环节

[SDOI2008] 石子合并

题目描述

在一个操场上摆放着一排 \(N\) 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的 \(2\) 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。

试设计一个算法,计算出将 \(N\) 堆石子合并成一堆的最小得分。

输入格式

第一行一个整数 \(N\)

接下来 \(N\) 行,第 \(i\) 行一个整数 \(a_i\),代表第 \(i\) 堆石子的石子数。

输出格式

输出将所有石子合并为一堆的最小得分。

样例 #1

样例输入 #1

4
1
1
1
1

样例输出 #1

8

提示

$ N \leq 40000, a_i \leq 200$

请注意 \(N\) 的范围(来自上传者的提示)


神马双倍经验? 开什么玩笑,喜提TLE。瞅一眼数据范围,我嘞个 $ N \leq 40000, a_i \leq 200$。


正片开始

套路做法:

  1. 先向后扫序列,找到第一个\(v_{k+1} \leq v_{k-1}\)\(k\),然后将\(v_{k-1}\)\(v_{k}\)合并,并从序列中删除,这个操作可以用\(vector\)进行维护。

  2. 然后从\(k-1\)的位置开始向前扫,找到第一个\(cnt\)使得\(v_{cnt} > v_{k} + v_{k-1}\) ,然后将$ v_{k} + v_{k-1}$ 的值塞到 \(cnt+1\) 的位置。

  3. 重复以上步骤直至序列中元素个数为1。

至于算法的正确性,我有个绝妙的解释,但这里我写不下绝不是我不会


完整代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+520,mod=9999973;
int n;
ll ans;
vector<int>v;
int findx()
{int k=v.size()-1;//初始化坐标for(int i=0;i<v.size()-2;i++){if(v[i]<=v[i+2]){k=i+1;break;}}int tmp=v[k-1]+v[k];v.erase(v.begin()+k-1);v.erase(v.begin()+k-1);int cnt=-1;//初始化坐标for(int i=k-1;i>=0;i--){if(v[i]>tmp){cnt=i;break;}}v.insert(v.begin()+cnt+1,tmp);return tmp;
}
int main() 
{cin>>n;for(int i=1;i<=n;i++) {int x;cin>>x;v.push_back(x);}for(int i=0;i<n-1;i++) ans+=findx();cout<<ans<<endl;return 0;
}

完结收工!!!!!

个人主页

看完点赞,养成习惯

\(\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\)

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

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

相关文章

VMware ESXi 8.0U3b macOS Unlocker OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 8.0U3b macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)VMware ESXi 8.0U3b macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U3 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:…

【日记】书荒了(337 字)

正文几乎玩了一周之后上班的第一天。确实有些惫懒。基本都在解决一些之前代班同事留下来的遗留工作。整理了一下,发现工作清单上好多任务都没什么意义。今天打印准考证,发现考试地点在市里…… 本来还想着,考完去找灵玩儿,这下不行了。而且一天考两科。这我是真没想到。所以…

“DLL load failed: 找不到指定的模块。”的一种解法

问题来源: 本身在Al studio的环境训练是没问题的,由于某些问题在平台不好弄,于是copy了项目,anconda建立了paddle-gpu的虚拟环境也搭建了,但是在跑项目的时候出现了如下错误:网上了查看了许多方法,参考着试了不少 测试方法一:缺少的dll文件补上了,失败告终 测试方法二…

py3.7+win10的cv2.xfeatures2d_SIFT.create()函数不存在问题

python3.7 环境window10 64位 cv2包问题。问题 做图片处理用opencv-python做模板匹配的时候会用个sift模型,就会用到cv2.xfeatures2d_SIFT.create()这个函数,在我正要用它增加自己知识,巴拉巴啦....的时候,咦?!这是个什么鬼哦,没有这个函数呢。 百度发现需要什么卸载原版…

聊聊位运算一些注意事项

目录位运算位运算和逻辑运算区别位运算的几点注意异或的运算规则异或的经典问题:两数交换位操作建议使用宏定义好后使用位运算整型提升问题左移和右移概念移位运算容易误解成移位赋值 位运算位运算和逻辑运算区别 位运算是一位对应一位的对所有位逐一进行运算(逐比特位进行运算…

频繁改版惹人烦?火山引擎数据飞轮两招直击APP痛点促增长

APP精准有效的自我迭代,能够为其带来用户粘性增强与活跃度增长,而随之不断增长的用户使用量又会带来更加丰富的数据,从而支撑 APP 实现更为精准科学的洞察。更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 你应该遇到过这样的情况:…

易优eyoucms网站安装一直显示未知错误,无法继续

遇到“未知错误”并且在多台服务器上都无法完成安装的情况,可能是因为一些特定的环境配置问题。根据提供的信息,这里有几个可能的原因及解决方法:数据库版本问题:如果数据库版本较高(例如MySQL 8.x),而EyouCMS仅支持较旧的版本(如MySQL 5.6),那么将数据库版本回退到E…

易优eyoucms网站数据库文件版本号(v1.3.9)与CMS源码版本号(v1.4.1)不一致,无法安装,如何解决?

当遇到数据库文件版本号与CMS源码版本号不一致的问题时,可以采取以下两种方法来解决: 第一种方法:回原网站备份数据库再搬家回到原网站备份数据库:登录原网站的数据库管理系统(如phpMyAdmin或通过命令行)。 备份整个数据库。 导出数据库文件,并保存到本地。在新服务器上…

易优eyoucms网站安装报错 Service Unavailable

当你在安装EyouCMS时遇到"Service Unavailable"错误,这通常意味着Web服务器(如IIS或Apache)无法处理请求,可能是由于资源限制、配置问题或其他服务器端的问题。以下是一些可能的解决方案:检查服务器资源:确认服务器是否有足够的资源(CPU、内存、磁盘空间)来运…

宝塔Linux面板搭建开源考试系统phpems

一、安装宝塔linux面板 1、宝塔linux面板官网:https://baota.yingxunszcm.cn/2、安装宝塔linux面板,使用万能安装脚本if [ -f /usr/bin/curl ];then curl -sSO download.cnnbt.net/install_panel.sh;else wget -O install_panel.sh download.cnnbt.net/install_panel.sh;fi;b…

数字图像处理-实验4

实验4:几何变换与变形 实验4.1:图像透视变换将一幅输入图像变换为任意一个指定的四边形形状(给定四边形4个顶点)。提示:根据4个顶点的对应估计一个透视变换H,再用H对原图像进行形变(OpenCV相关函数:getPerspectiveTransform, warpPerspective等)设计一个交互程序,可以…

外观

1.加入外观的步骤:外观是GAP服务的一个特征,外观的值是在GAP初始化函数里面设置的,广播初始化时只能选择广播包中是否包含外观,而不能设置外观的值。所以,配置外观的步骤是首先在GAP初始化函数中根据实际应用设置外观特征的值,然后在广播初始化函数中设置包含或不包含外观…