首页 > 其他分享 >动态规划

动态规划

时间:2024-08-24 09:25:47浏览次数:8  
标签:pre right min 2s 柿子 动态 规划 left

拿出来写,我的 dp 真的要菜死了。

动态规划

也是大坑,待填。

斜率优化

推式子大题,推出柿子之后可以通过对柿子变换得到类似一次函数柿子,然后就可以扔到二维平面看做凸包,用二分/cdq/单调队列/数据结构等等东西维护,也可以用李超树偷懒硬搞,好像复杂度要多只老哥。

P4655 [CEOI2017] Building Bridges

简单题,写柿子:

\[f_i=\min\left \{ f_j+(h_i-h_j)^2 + pre_{i-1}-pre_j \right \} \]

其中 \(pre_i = \sum_{j=1}^{i} w_j\),整理一下,写出:

\[f_i=h_i^2+pre_{i-1}+\min \left \{ f_j-2h_ih_j+h_j^2-pre_j\right \} \]

写斜率柿子,令 \(k=-2h_i\),\(b=f_j+h_j^2-pre_j\),则:

\[f_i=h_i^2+pre_{i-1}+\min \left \{ kh_i+b\right \} \]

现在就把后面 \(\min\) 里面的柿子看做一次函数,扔到李超树上取当 \(x=h_i\) 时的最小值即可。

code

P3195 [HNOI2008] 玩具装箱

推柿子:

\[f_i= \min \left \{ f_{j-1}+(i-j+\sum_{k=j}^{i} C_k - L)^2\right \} \]

记 \(s_j = \sum_{j=1}^{i} C_i+1\),再变一下柿子,令 \(L\) 提前 \(+1\):

\[f_i = \min \left \{ f_{j}+(s_i-s_{j}-L)^2\right \} \]

拆开无用量 :

\[f_i = s_i^2-2s_iL+L^2 + \min \left \{f_j+ s_j^2+2s_jL-2s_is_j\right \} \]

拿出后面的 \(\min\) 柿子,写成一次函数形式,\(b=f_j+s_j^2+2s_jL\),\(k=-2s_j\)

\[f_i=s_i^2-2s_iL + L^2 + \min \left \{ ks_i+b\right \} \]

扔到李超树上求当 \(x=s_i\) 时的最小值就行了。

code

数据结构优化 dp

很多时候,我们的 dp 值可能由什么区间 \(\max\),区间和之类的转移而来,这样我们就可以用数据结构来维护 dp 值,降低复杂度。

AT_dp_w Intervals

线段树优化板子题,这种区间问题我们的常见 trick 是仅当便利到右端点时才计算贡献,可以做到不重不漏,设计 \(f(i,j)\) 表示到第 \(i\) 个位置,上一个 \(1\) 在 \(j\) 位置的最大价值,首先有 \(f(i,i) = \max_{j=1}^{i} f(i-1,j)\),然后我们每次遍历到一个右端点,只有 \(l_j \leq j\) 的位置才能有这个区间的贡献,所以我们固定右端点,每个位置开个 vector,便利区间修改即可,最后答案就是全部区间取 \(\max\)。

code

标签:pre,right,min,2s,柿子,动态,规划,left
From: https://www.cnblogs.com/Wei-Han-Fei/p/18377394

相关文章

  • C动态内存分配和管理函数malloc,calloc,free与realloc
    目录 介绍1.void*malloc(size_tsize);2.void*calloc(size_tnum,size_tsize);3.void*realloc(void*ptr,size_tsize);4.voidfree(void*ptr);5.代码演示 介绍在C语言中,malloc、calloc、realloc 和 free 是用于动态内存分配和管理的标准库函数。它们......
  • ArrayList动态扩容机制(长度可变原理)
    ArrayList底层是数组结构的,数组的默认长度为10。当数组添加满了后,会自动扩容为1.5倍。原理讲解:1.用空参构造函数创建ArrayList集合容器。测试代码:publicclassArrayListDemo{publicstaticvoidmain(String[]args){//创建ArrayList集合容器......
  • dll动态链接库怎么修复?动态链接库修复指南
    DLL(DynamicLinkLibrary)动态链接库是Windows操作系统中至关重要的一部分,它包含了可由多个程序共享的功能代码。当DLL文件出现问题时,如缺失、损坏或版本不兼容,可能导致应用程序无法正常运行,甚至系统错误。本文将详细介绍修复DLL动态链接库的几种常见方法,帮助用户解决此类问题。......
  • C++的动态数组vector番外之capacity
    今日诗词:爱他明月好,憔悴也相关。西风多少恨,吹不散眉弯。                    ——《临江仙·寒柳》【清】纳兰容若目录引言正文string中的和vector中的capacity有什么区别 vector扩容时内存分配的策略是什么?capacity在vect......
  • 24暑假算法刷题 | Day39 | 动态规划 VII | LeetCode 198. 打家劫舍,213. 打家劫舍 II,33
    目录198.打家劫舍题目描述题解213.打家劫舍II题目描述题解337.打家劫舍III题目描述题解打家劫舍的一天......
  • 系列:水果甜度个人手持设备检测-产品规划汇总与小结
    系列:水果甜度个人手持设备检测--产品规划汇总与小结背景接上一篇,我们从假设的用户需求出发,规划输出软硬件结合的一体化产品。在产品中搭载近红外光谱(NIR)、超声检测的模块,并针对不同的瓜果类型,使用远程升级的办法,分阶段、分步骤的进行模型库和检测算法的更新,最大化的保护用......
  • Java设计模式之代理模式:静态代理VS动态代理,与其他模式的对比分析和案例解析
    一、代理模式简介代理模式(ProxyPattern)是一种结构型设计模式,它提供了一个代理对象,用来控制对另一个对象的访问。这种模式通常用于在访问对象时引入额外的功能,而不改变对象的接口。代理模式的核心思想是为其他对象提供一种代理,以控制对这个对象的访问。在现实生活中,代理模......
  • 动态类加载
    动态类加载代码块加载顺序这里的代码块主要指的是这四种静态代码块:static{}构造代码块:{}无参构造器:ClassName()有参构造器:ClassName(Stringname)我创建两个类Person.javapublicclassPerson{publicstaticintstaticVar;publicstaticintid;static{Syst......
  • 动态规划引入 Day 1
    动态规划总所周知,动态规划是一个肥肠重要的一个东西(对于算法竞赛而言)……So,我们开始讲动态规划。用的是Luogu官方题单:https://www.luogu.com.cn/training/211#problems以下也会依此顺序来讲解。。。引子Problem1https://www.luogu.com.cn/problem/P1216[USACO1.5][I......
  • 动态化-鸿蒙跨端方案介绍
    一、背景......