#斜率优化,动态规划#jzoj 2318 洛谷 3628 bzoj 1911 特别行动队

本文主要是介绍#斜率优化,动态规划#jzoj 2318 洛谷 3628 bzoj 1911 特别行动队,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

洛谷链接


分析

首先给出朴素的方程( s [ i ] = ∑ j = 1 i x [ j ] s[i]=\sum_{j=1}^{i}x[j] s[i]=j=1ix[j])
d p [ i ] = m i n { d p [ j ] + a ( s [ i ] − s [ j ] ) 2 + b ( s [ i ] − s [ j ] ) + c } dp[i]=min\{dp[j]+a(s[i]-s[j])^2+b(s[i]-s[j])+c\} dp[i]=min{dp[j]+a(s[i]s[j])2+b(s[i]s[j])+c}
然后分析 k ( j &lt; k ) 比 j k(j&lt;k)比j k(j<k)j更优时,那么
d p [ k ] + a ( s [ i ] − s [ k ] ) 2 + b ( s [ i ] − s [ k ] ) ≥ d p [ j ] + a ( s [ i ] − s [ j ] ) 2 + b ( s [ i ] − s [ j ] ) dp[k]+a(s[i]-s[k])^2+b(s[i]-s[k])\geq dp[j]+a(s[i]-s[j])^2+b(s[i]-s[j]) dp[k]+a(s[i]s[k])2+b(s[i]s[k])dp[j]+a(s[i]s[j])2+b(s[i]s[j])
再进一步得到
d p [ k ] + a s [ k ] 2 − 2 a s [ i ] s [ k ] − b s [ k ] ≥ d p [ j ] + a s [ j ] 2 − 2 a s [ i ] s [ j ] − b s [ j ] dp[k]+as[k]^2-2as[i]s[k]-bs[k]\geq dp[j]+as[j]^2-2as[i]s[j]-bs[j] dp[k]+as[k]22as[i]s[k]bs[k]dp[j]+as[j]22as[i]s[j]bs[j]
移项后得到
d p [ k ] − d p [ j ] + a s [ k ] 2 − a s [ j ] 2 − b ( s [ k ] − s [ j ] ) ≥ 2 a s [ i ] ( s [ k ] − s [ j ] ) dp[k]-dp[j]+as[k]^2-as[j]^2-b(s[k]-s[j])\geq 2as[i](s[k]-s[j]) dp[k]dp[j]+as[k]2as[j]2b(s[k]s[j])2as[i](s[k]s[j])
最后得到
d p [ k ] − d p [ j ] s [ k ] − s [ j ] + a ( s [ k ] + s [ j ] ) ≥ 2 a s [ i ] + b \frac{dp[k]-dp[j]}{s[k]-s[j]}+a(s[k]+s[j])\geq 2as[i]+b s[k]s[j]dp[k]dp[j]+a(s[k]+s[j])2as[i]+b
分析 2 a s [ i ] + b 2as[i]+b 2as[i]+b单调递减,所以说维护的是上凸壳,然后就可以 O ( n ) O(n) O(n)解决


代码

#include <cstdio>
#include <cctype>
#define rr register
#define w(x) ((x)*(x))
#define max(a,b) (((a)>(b))?(a):(b))
using namespace std;
int n,s[1000001],q[1000001];
long long a,b,c,dp[1000001];
inline signed iut(){rr int ans=0,f=1; rr char c=getchar();while (!isdigit(c)&&c!='-') c=getchar();if (c=='-') c=getchar(),f=-f;while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans*f;
}
inline double slope(int x,int y){if (s[y]==s[x]) return 1e18;else return 1.0*(dp[y]-dp[x])/(s[y]-s[x])+a*(s[x]+s[y]);
}
signed main(){n=iut(); a=iut(); b=iut(); c=iut();for (rr int i=1;i<=n;++i) s[i]=s[i-1]+iut();for (rr int i=1,head=1,tail=1;i<=n;++i){while (head<tail&&slope(q[head],q[head+1])>=(a*s[i]<<1)+b) ++head;dp[i]=dp[q[head]]+a*w(s[i]-s[q[head]])+b*(s[i]-s[q[head]])+c;while (head<tail&&slope(q[tail-1],q[tail])<slope(q[tail],i)) --tail;q[++tail]=i;}return !printf("%lld",dp[n]);
}

这篇关于#斜率优化,动态规划#jzoj 2318 洛谷 3628 bzoj 1911 特别行动队的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模