AT_abc201_f [ABC201F] Insertion Sort 题解

news/2025/9/24 8:57:31/文章来源:https://www.cnblogs.com/-xpigeon-/p/19108153

link

题目给出了 \(1\)\(n\) 的一组排列 \(x_1,x_2...x_n\),并对于第 \(i\) 个数 \(1\le i \le n\) 给出三个操作:

  1. 花费 \(A_i\) 的代价,把第 \(i\) 个数移动到任意位置。
  2. 花费 \(B_i\) 的代价,把第 \(i\) 个数移动到最左边。
  3. 花费 \(C_i\) 的代价,把第 \(i\) 个数移动到最右边。

可以进行无数次操作,求经过若干次操作后把该排列按从小到大排序需要到最小代价是多少?

对于这种给出不同操作不同代价,并最终要求达成某种目的题目,比较容易想到可能需要通过 \(dp\) 来寻找最优解,我们先尝试能否设计出正确的 \(dp\) 状态和复杂度能够接受的状态转移。

开始思考之前,我们发现题目中给出的“向左移”和“向右移”操作是一种比较受限制的操作,而“任意移动”相对自由,我们尽可能地希望使用受限制的操作时的代价比自由的操作更小,因此可以考虑将每个 \(B_i\)\(C_i\)\(A_i\)\(\min\),这样至少保证受限制的操作的代价不劣。否则太亏(

现在考虑 \(dp\) 的阶段可以用什么来划分,但好像直接去简单地划分并不好做,如第 \(i\) 个位置前排好序的最小代价,我们不好得知在局部排好序后的具体形态,也不能从这样的子问题转移到更大的问题,我们还是先来发掘一些性质。

有一个不难理解的结论:在最优的操作方案中必然会有一个数字是没有移动的,否则可以通过固定一个“向左移动的最大数”或者”向右移动的最小数”来减少一个人的消耗,在排好序后,这些人不用动也会处于一个正确的相对位置。

这一结论是基于值域的,我们可以尝试把 \(dp\) 阶段设为规定值为 \(x\) 的数字不动,再把整个序列排好序最小代价,显然存在一种方案,可以将小于 \(x\) 的数按从大到小的顺序放到最左边,把大于 \(x\) 的数字按从小到大的顺序放到最右边,这样的操作方案肯定是合法的,但这样就没有用到“任意移动”的操作,也好像没什么办法去转移。

我们尝试结论加强:最优方案中不止是一个数没有移动,可能是所给排列中的一个上升子序列没有被移动,显然这样的上升子序列的相对位置是正确的,可以将值小于上升子序列中第一个数的都按顺序放最左边,值大于上升子序列中最后一个数的都按顺序放最右边,值出于上升子序列中间的使用“任意移动”的操作排序。

这一结论直接启发我们的状态设计和转移,我们可以与刚才一样以值域作为 \(dp\) 的阶段,为了方便转移,状态重新表述为:\(dp_x\) 表示把值域在 \([1,x]\) 区间内的数字排好序所需要的最小代价。

状态转移方程为(以下的 \(p_x\) 表述为数字 \(x\) 在排序前所处的位置):

\[dp_x= \min \{\sum_{i=1}^{x-1}b_i,\min_{\large y < x,p_y<p_x} (dp_y+\sum_{k=y+1}^{x-1}A_k) \} \]

可以形象化地理解一下这一转移:相当于我们在排序前的数列选择了两个数作为不进行移动的上升子序列的头与尾(要满足上升子序列的条件,故 \(y < x,p_y<p_x\)),\(dp_y\) 中已经把 \([1,y]\) 中的数排好序,再按照原来的方案进行操作就需要将值在 \([y+1,x-1]\) 区间内的数字“任意移动”,同时最优方案也可能只有 \(x\) 一个数没有移动,所以也要和最初的移动方案(小于 \(x\) 的全“向左移”)取最小值。

转移的后半部分是二维偏序,用线段树可以优化,具体来说就是因为 \(y\) 是定值,把 \(dp_y-\sum_{i=1}^{y}\) 存入数据结构中即可,前缀和优化应该是大家的被动技能,就不说了

\(dp\) 初值全为正无穷,答案为 \(\min (dp_x+\sum_{i=x+1}^{n} C_i)\)。(因为 \(dp\) 状态中没有将后半部分排序)

时间复杂度 \(O(n \log n)\)

using namespace std;
const int N=2e5+5;
const int inf=0x3f3f3f3f3f3f3f3f;
int n,p[N],suma[N],sumb[N],sumc[N],dp[N],ans=inf;
int t[N*3],P=1;
void update(int pos,int v){int x=pos+P;t[x]=v;for(x>>=1;x;x>>=1) t[x]=min(t[ls(x)],t[rs(x)]);
}
int query(int l,int r){int res=inf;l+=P-1,r+=P+1;while(l^1^r){if(~l&1) res=min(res,t[l^1]);if(r&1) res=min(res,t[r^1]);l>>=1,r>>=1;}return res;
}
void xpigeon(){rd(n);memset(t,0x3f,sizeof(t));while(P<=n+1) P<<=1;for(int i=1,x;i<=n;i++){rd(x);p[x]=i;}for(int i=1,a,b,c;i<=n;i++){rd(a,b,c);suma[i]=suma[i-1]+a;sumb[i]=sumb[i-1]+min(a,b);sumc[i]=sumc[i-1]+min(a,c);}for(int i=1;i<=n;i++){dp[i]=min(sumb[i-1],query(1,p[i])+suma[i-1]);ans=min(ans,dp[i]+sumc[n]-sumc[i]);update(p[i],dp[i]-suma[i]);}cout<<ans<<'\n';
}
signed main() {ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);xpigeon();return 0;
}

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

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

相关文章

ruoyi-vue(十四)——前端框架及package.json,vite.config.js, main.js记录介绍

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

一个优秀的网站免费下载app软件安装

E1 PCM复用设备能当程控交换机用吗&#xff1f;这个问题在平时与用户沟通中发现&#xff0c;发现有不少用户认为E1 PCM复用设备可以当程控交换机使用&#xff0c;不仅能实现电话线远端延伸&#xff0c;还可以实现电话机交换功能。 其实这个观点是错误的&#xff0c;E1 PCM复用…

12380网站建设意见成都建设局官网

(//div[starts-with(class,‘abcolumn-light__listCell‘)])[4] 注意&#xff1a;一定要加小括号&#xff0c;然后再加索引号

网站开发项目计划书模板大型网站建设行情

文章目录介绍1、获取code并向服务器发送请求2、引入发送HTTP请求的maven依赖3、封装HTTP请求工具类4、编写控制器介绍 注意事项&#xff1a; 必须是GET请求微信发送的code码只能使用一次 1、获取code并向服务器发送请求 注&#xff1a;http://localhost:8080/portal/blog/a…

适合做外链的网站wordpress 迁移域名

内存操作命令 直接对DRAM进行读写的操作,uboot常用的内存操作命令有md,nm,mm,mw,cp和cmp. md命令: 显示内存值 # md md - memory display Usage: md [.b, .w, .l, .q] address [# of objects] b:1个字节 byte w:2个字节 world l:4个字节 long of objects 以word 为单位的1…

mvc5 网站开发之美 pdf画册设计说明

原标题&#xff1a;六星教育&#xff1a;如何在PHP项目实战中取胜&#xff0c;获得腾讯等大厂的offer我们在进行PHP学习的时候&#xff0c;总会强调实战的重要性。事实也是如此&#xff0c;如果光知道理论知识&#xff0c;而缺乏实际项目的参与与运作&#xff0c;就会变得纸上谈…

网站管理助手v3.0广州 网站建设公司

一、应用场景 阿里巴巴中国站获得公司档案信息 API接口的应用场景可以包括但不限于以下几种情况&#xff1a; 1、企业信息查询&#xff1a;API接口可用于查询企业的基本档案信息&#xff0c;如企业名称、注册地址、法定代表人、经营范围等。这些信息对于了解企业背景、信用状…

2025.9.24——1橙

普及- P1855 榨取kkksc03 简单的二维背包DP

完整教程:MySQL 启动日志报错: File /mysql-bin.index not found (Errcode: 13 - Permission denied)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

用什么建设网站ps网页设计从零开始教程

要实现的内容&#xff1a;手写签名&#xff0c;协议内容。点击提交后&#xff1a;生成1张图片&#xff0c;有协议内容和签署日期和签署人。 实现的效果图如下&#xff1a; 1、签名页面 <template><view class"index"><u-navbar title"电子协议…

设计网站推荐html简述建设网站的一般过程

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;用一个哈希表记录窗口内的所有元素&#xff08;用来对窗口内元素去重&#xff09;&#xff0c;我们取哈希表中元素数量大于等于m的窗口总和的最大值 题解代码 use std::coll…

网站建设信息平台为企业做贡献的句子

1.uImage zImage Image bzImage的区别 \qquaduImage既包括内核数据&#xff0c;又包括和uboot的衔接数据&#xff1b;zImage Image bzImage本质是一样的&#xff0c;但是数据压缩的格式不同&#xff0c;只包含内核内容。 2.uboot内核启动条件 \qquad启动参数&#xff1b;文件系…

网站开发的相关技能有哪些积分网站运营建设投标书

告别2023&#xff0c;迎接2024。大模型技术已成为业界关注焦点&#xff0c;你是否也渴望掌握这一领域却又不知从何学起&#xff1f; 本篇文章将特别针对入门新手&#xff0c;以浅显易懂的方式梳理大模型的发展历程、核心网络结构以及数据微调等关键技术。 如果你在阅读中收获…

如何用 ftp上传网站网页制作模板登录

学生公寓管理系统目录 目录 基于Springboot的学生公寓管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、宿舍列表 2、宿舍公告信息管理 3、宿舍公告类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…

企业门户网站的意义杨凌开发建设局网站

本文转载自公众号&#xff1a;AI科技大本营。 分享嘉宾 | 刘升平&#xff08;云知声 AI Labs 资深技术专家&#xff09;来源 | AI 科技大本营在线公开课人机对话系统&#xff0c;或者会话交互&#xff0c;有望成为物联…

网站服务器备案查询网站备案棋牌源码论坛

一、行业背景 二、行业特点 1.供电可靠性要求高&#xff1a;医院配电系统复杂&#xff0c;门诊、急救、手术室、ICU/CCU、血液透析等场合特一级和一级负荷比较多&#xff0c;一旦发生故障会造成严重影响&#xff0c;对配电可靠性要求极高。 2.能耗水平高&#xff1a;医院能耗…

网站开发的费用景德镇建站公司

注意&#xff1a;这种写法&#xff0c;是有问题的。注册事件是在页面加载完毕以后就完成了&#xff0c;但此时并没有触发事件。事件触发是由用户在页面上点击时才会触发&#xff0c;所以说当用户点击时&#xff0c;才会执行事件处理函数&#xff0c;那么此时的i已经变成了4&…

做企业网站有什么好处访问紧急升级中通知问升级

近日博主 ruanyf 在网上发布了一条关于套接字“socket”的解释&#xff0c;引发了网友对于那些 IT 界的神翻译的讨论&#xff1a; 突然想到&#xff0c;socket就是插座。服务器的socket&#xff0c;就是服务器提供插座&#xff0c;等着客户端的插头插进来。一旦插入完成&#x…

AT_arc172_d [ARC172D] Distance Ranking

比较牛的构造题,AT 出题人还是太有水平了。 首先我们想如果两两距离相同该怎么构造。 这一步比较简单,直接每一维都分配给一个坐标一个 \(1\) 即可。 然后我们改成小于号,考虑一些微小的扰动,将上述 \(1\) 改成 \(…

网站建设方向课程苏州网站建设选苏州梦易行

文章目录 前言一、SpringMvc1、简介2、核心组件和调用流程2.1 涉及组件的理解 3、小案例快速体验3.1场景需求3.1.1 导入依赖3.1.2 controller声明3.1.3 核心配置类3.1.4 环境搭建3.1.6 配置tomcat3.1.7 测试 二、SpringMvc 接收参数1.路径设置注解2、param接收参数四种类型2.1 …