首页 > 其他分享 >[HNOI2008] 玩具装箱

[HNOI2008] 玩具装箱

时间:2025-01-09 16:11:24浏览次数:1  
标签:pre 2v min 2kv 玩具 iv HNOI2008 装箱 dp

前言

终于进入新专题了家人们

列举一下还要补的专题

  1. 矩阵快速幂
  2. 组合数学
  3. \(\rm{sos\ dp}\)

不过先不管了, 除了复习, 大部分时候总要向前看的嘛

考试的时候带着耳塞, 不带感觉好吵啊, 但是一直带着会神经衰弱的, 所以只能尝试集中注意力

思路

首先转化题意

给定 \(n\) 条线段, 第 \(i\) 条线段的长度为 \(C_i\) , 我们要将这些线段分开, 其中一个分段 \([L, R]\) 的花费为 \(cost = (R - L + \sum_{i = L}^{R} C_i - W)^2\) , 求最小的花费之和

容易想到 \(\rm{dp}\) , 令 \(dp_{i}\) 表示考虑到第 \(i\) 条线段的最优花费
容易找到转移

\[\begin{align*} dp_i & = \min_{j \in [0, i]} dp_j + (i - j - 1 + pre_i - pre_j - W)^2 \\ & = \min_{j \in [0, i]} dp_j + [(pre_i + i) - (pre_j + j) - (W + 1)]^2 \\ 令 k &= (W + 1), v_i = pre_i + i \\ & = \min_{j \in [0, i]} dp_j + (v_i - v_j - k)^2 \\ & = \min_{j \in [0, i]} dp_j + (v_i - v_j)^2 + k^2 - 2k(v_i - v_j) \\ & = k^2 + \min_{j \in [0, i]} dp_j + (v_i^2 + v_j^2 - 2v_iv_j) - 2kv_i + 2kv_j \\ & = -k^2 + \min_{j \in [0, i]} dp_j + (v_i^2 - 2kv_i + k^2) + (v_j^2 + 2kv_j + k^2) - 2v_iv_j \\ & = -k^2 + \min_{j \in [0, i]} dp_j + (v_i- k)^2 + (v_j + k)^2 - 2v_iv_j \\ & = v_i^2 - 2kv_i + \min_{j \in [0, i]} dp_j + (v_j + k)^2 - 2v_iv_j \\ \end{align*} \]

考虑最终的柿子

\[dp_i = v_i^2 - 2kv_i + \min_{j \in [0, i]} dp_j + (v_j + k)^2 - 2v_iv_j \]

考虑

\[\min_{j \in [0, i]} dp_j + (v_j + k)^2 - 2v_iv_j \]

你发现 \(v_iv_j\) 这样的形式, 考虑斜率优化
先不管 \(v_i^2 - 2kv_i\) , 我们写出柿子

\[dp_i = \min_{j \in [0, i]} dp_j + (v_j + k)^2 - 2v_iv_j \]

拆掉 \(\min\)

\[dp_i = dp_j + (v_j + k)^2 - 2v_iv_j \]

\[\Downarrow \]

\[dp_j + (v_j + k)^2 = 2v_iv_j - dp_i \]

套路的, 令 \(x = v_j, y = dp_j + (v_j + k)^2, k = 2v_i, b = -dp_i\)
柿子转化为

\[y = kx + b \]

考虑其性质满足 \(k, x\) 单调递增, 我们简单的运用斜率优化, 使得 \(b\) 最大

\[{dp_i}_{\min} = -b_{\max} + v_i^2 - 2kv_i \]

考虑实现,
由于 \(k, x\) 的单增, 我们考虑使用单调队列维护上凸包
单调队列维护点即可

实现

框架

直接按照上述内容实现即可

代码

等一下, 先把今天题补了

总结

常见的 \(\rm{dp}\) 状态设计

优化不来可以考虑继续研究柿子

常见的斜率优化, 拆柿子能力史诗级提升

标签:pre,2v,min,2kv,玩具,iv,HNOI2008,装箱,dp
From: https://www.cnblogs.com/YzaCsp/p/18662331

相关文章

  • Java难绷知识03——包装器类及其自动装箱和拆箱
    Java难绷知识03——包装器类及其自动装箱和拆箱本篇文章和之前的倾向稍微有些不同,这篇文章我不仅要讨论一些容易头疼的细节,而且我打算尝试讨论一下如何理解Java中的包装类以及自动拆箱和自动装箱自动装箱(Autoboxing)和自动拆箱(Unboxing)是在基本数据类型和它们对应的包装类之间“......
  • 【Java教程】Day5-04 核心类:包装类与自动装箱
    在Java中,数据类型分为两种:基本类型和引用类型。了解它们的区别及相互转换对优化代码非常重要。1.基本类型vs引用类型基本类型:byte,short,int,long,boolean,float,double,char。引用类型:所有的类(class)和接口(interface)。基本类型不能赋值为null,而引用类型可以。比如:ja......
  • 题解 - 买玩具
    题目描述玩具店有个活动,买2个送1个:3个玩具只要付较贵的2个玩具的钱就可以了。举个例子:10324649,如果这样组合(10,3,2),(4,6,4),(9),就在第一个括号中省下2元,第二个括号中省下4元,但第三个括号不能省了,因为只有一个玩具。小星星是个懂事的孩子,他想尽可能的为家......
  • 万物之父和装箱拆箱
    万物之父的基本概念关键字objectobject是所有类型的基类可以利用里氏替换原则,用object容器装所有对象可以用来表示不确定类型,作为函数的参数类型obejct的使用//引用类型objecto=newSon();Sons=newSon();o=s;//用object装载之后,用is和as判断和转换if(oi......
  • 6. Java自动装箱与拆箱
    1.装箱就是自动将基本数据类型转换为包装器类型(int->Integer);调用方法:Integer.valueOf(int)方法2.拆箱就是自动将包装器类型转换为基本数据类型(Integer->int);调用方法:Integer.intValue()方法在JavaSE5之前,如果要生成一个数值为10的Integer对象,必须这样执行:Integeri=newInteger......
  • 全球办公室集装箱市场报告:销量、收入、价格及最新动态(2024-2030)
    根据QYResearch研究团队调研统计,2023年全球办公室集装箱市场销售额达到了亿元,预计2030年将达到亿元,年复合增长率(CAGR)为%(2024-2030)。中国市场在过去几年变化较快,2023年市场规模为亿元,约占全球的%,预计2030年将达到亿元,届时全球占比将达到%。移动模块化集装箱市场在全球市......
  • [2253]基于JAVA的玩具贸易智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的玩具贸易智慧管理系统的设计与实现指导老师(一)选题的背景和意义在当前全球经济一体化与信息化快速发展的背景下,各行各业的企业管理面临着前所未有的机遇与挑战。玩具贸易行业作为全球消费市场的重要组成部分,其业务......
  • C#核心(16)万物之父和装箱拆箱
    前言西方说人类的万物之父是亚当,中国说人类的万物之母是女娲,那么c#中有没有一个万物之父呢?有,我们今天就来浅浅聊一下。在C#和许多其他面向对象编程语言中,“万物之父”指的是Object类。这个类的历史和重要性源于面向对象编程的基本原则和现代编程语言的发展。下面是对Object......
  • springboot玩具回收与租借系统-计算机毕业设计源码47829
    目 录摘要1绪论1.1研究背景1.2课题意义2 玩具回收与租借系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3系统用例分析2.4系统流程分析2......
  • Java毕设项目案例实战II基于Java+Spring Boot+MySQL的玩具租赁系统设计与实现(开发文档
    目录一、前言二、技术介绍三、系统实现四、核心代码五、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。一、前言在环保意识日益增强的今天,玩具租赁作为一种绿色、经济的消费方式,逐渐受到家长和孩......