【总结】【模板】2021年寒假集训前期总结

2024-03-12 18:48

本文主要是介绍【总结】【模板】2021年寒假集训前期总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 0x00 前言
    • 0x01 单调队列优化 DP
    • 0x02 斜率优化 DP

0x00 前言

学了 DP 的优化和搜索的优化,说实话真的没什么可以总结的,但是还是强行安了几个模板,有的版块确实总结不出什么模板了,就暂且咕咕咕掉吧。。。

0x01 单调队列优化 DP

首先还是要写出 dp 式

一般是一个两重循环

第一重循环枚举阶段,第二重循环枚举前面的并更新后面

大致就是这样的:

d p i = m i n ( j − k + 1 ) → j { f ( i ) + g ( j ) } dp_i=\mathrm{min}_{(j-k+1)\to j}\{f(i)+g(j)\} dpi=min(jk+1)j{f(i)+g(j)}

其中 f ( i ) f(i) f(i) g ( j ) g(j) g(j),分别表示的是与 i i i j j j 有关的多项式/单项式

至于 k k k,由题目而定

由于 i i i 在这个阶段是固定的,所以把 f ( i ) f(i) f(i) 给分离出来

d p i = m i n ( j − k + 1 ) → j { g ( j ) } + f ( i ) dp_i=\mathrm{min}_{(j-k+1)\to j}\{g(j)\}+f(i) dpi=min(jk+1)j{g(j)}+f(i)

然后对于 g ( i ) g(i) g(i),即是求一个区间最小

直接套用单调队列就行了

int head=1,tail=1;
for(int i=1;i<=n;i++){if(i-k>q[head] && head<=tail){head++;}while(g(i)>g(q[tail]) && head<=tail){//这里的g(i)按题而定tail--;}用q[head]当做原本的j去更新dp[i];q[++tail]=i;
}

0x02 斜率优化 DP

推柿子是有点复杂,但最后套用模板是挺方便

由于题目千遍万化,没有办法直接表示,所以就以一道版题为例:

打印文章:

  • 首先,写出dp式: d p i = m i n ( d p j + ( s u m i − s u m j ) 2 + m ) dp_i=min(dp_j+(sum_i-sum_j)^2+m) dpi=min(dpj+(sumisumj)2+m) s u m i sum_i sumi 表示的是前缀和

  • 然后不妨设 k k k转移过劳 比 j j j 转移过来优,且 k k k j j j 后面


  • d p j + ( s u m i − s u m j ) 2 + m ≥ d p k + ( s u m i − s u m k ) 2 + m dp_j+(sum_i-sum_j)^2+m \geq dp_k+(sum_i-sum_k)^2+m dpj+(sumisumj)2+mdpk+(sumisumk)2+m

  • 然后对上面这个不等式化简,注意 k k k j j j 后,所以 s u m k ≥ s u m j sum_k \geq sum_j sumksumj

  • ( s u m k 2 + d p k ) − ( s u m j 2 + d p j ) s u m k − s u m j ≥ 2 s u m i \frac{(sum_k^2+dp_k)-(sum_j^2+dp_j)}{sum_k-sum_j} \geq 2sum_i sumksumj(sumk2+dpk)(sumj2+dpj)2sumi

于是上面这个是分子,下面这个是分母,右边那个是R(i),盲猜是维护一个下凸壳(因为如果不是的话是无法套这个模板的)

#include<cstdio>
#include<iostream>
#include<cmath> 
using namespace std;
const int MAXN=500005;
int n,m,q[MAXN],s[MAXN],dp[MAXN];
int getson(int k,int j){//do sth.
}
int getmon(int k,int j){//do sth.
}
int main(){int n,m;//init int head=1,tail=1;for(int i=1;i<=n;i++){while(head<tail && getson(q[head],q[head+1])<=R(i)*getmon(q[head],q[head+1])){head++;}dp[i]=dp[q[head]]+(s[i]-s[q[head]])*(s[i]-s[q[head]])+m;//这里使用q[head]当作暴力中的j去更新dp[i]while(head<tail && getson(q[tail],i)*getmon(q[tail-1],q[tail])<=getson(q[tail-1],q[tail])*getmon(q[tail],i)){tail--;}q[++tail]=i;}printf("%d\n",dp[n]);
return 0;
}

这篇关于【总结】【模板】2021年寒假集训前期总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/802239

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经