#斜率优化,动态规划#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

相关文章

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. 基础操作模

MySQL中like模糊查询的优化方案

《MySQL中like模糊查询的优化方案》在MySQL中,like模糊查询是一种常用的查询方式,但在某些情况下可能会导致性能问题,本文将介绍八种优化MySQL中like模糊查询的方法,需要的朋友可以参... 目录1. 避免以通配符开头的查询2. 使用全文索引(Full-text Index)3. 使用前缀索

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL