洛谷P3628 [APIO2010]特别行动队(斜率优化)

传送门

 

先写出转移方程$$dp[i]=max\{dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c\}$$

假设$j$比$k$更优,则有$$dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c>dp[k]+a*(sum[i]-sum[k])^2+b*(sum[i]-sum[k])+c$$

展开,并消去同类项之后得$$dp[j]-2*a*sum[i]*sum[j]+a*sum[j]^2-b*sum[j]>dp[k]-2*a*sum[i]*sum[k]+a*sum[k]^2-b*sum[k]$$

移项,得$$(dp[j]+a*sum[j]^2-b*sum[j])-(dp[k]+a*sum[k]^2-b*sum[k])>2*a*sum[i]*sum[j]-2*a*sum[i]*sum[k]$$

设$Y[i]=dp[i]+a*sum[i]^2-b*sum[i],X[i]=sum[i]$

则有$$Y[j]-Y[k]>2*a*sum[i]*X[j]-2*a*sum[i]*X[k]$$

$$\frac{Y[j]-Y[k]}{X[j]-X[k]}>2*a*sum[i]$$

那么就是要我们维护一个上凸包,简单来说就是把原来维护下凸包的那些东西给反过来就好了(ps:我今天刚知道原来凸包还能是上凸的……我太菜了……)

 1 //minamoto
 2 #include<iostream>
 3 #include<cstdio>
 4 #define ll long long
 5 using namespace std;
 6 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
 7 char buf[1<<21],*p1=buf,*p2=buf;
 8 inline int read(){
 9     #define num ch-'0'
10     char ch;bool flag=0;int res;
11     while(!isdigit(ch=getc()))
12     (ch=='-')&&(flag=true);
13     for(res=num;isdigit(ch=getc());res=res*10+num);
14     (flag)&&(res=-res);
15     #undef num
16     return res;
17 }
18 const int N=1000005;
19 int sum[N],q[N],h,t,n;ll dp[N],a,b,c;
20 inline ll Y(int i){return dp[i]+a*sum[i]*sum[i]-b*sum[i];}
21 inline double slope(int j,int k){return 1.0*(Y(j)-Y(k))/(sum[j]-sum[k]);}
22 inline ll check(int x){return a*x*x+b*x+c;}
23 int main(){
24     //freopen("testdata.in","r",stdin);
25     n=read(),a=read(),b=read(),c=read();
26     for(int i=1;i<=n;++i) sum[i]=read()+sum[i-1];
27     for(int i=1;i<=n;++i){
28         int k=2*a*sum[i];
29         while(h<t&&slope(q[h],q[h+1])>k) ++h;
30         dp[i]=dp[q[h]]+check(sum[i]-sum[q[h]]);
31         while(h<t&&slope(q[t],q[t-1])<slope(q[t-1],i)) --t;q[++t]=i;
32     }
33     printf("%lld\n",dp[n]);
34     return 0;
35 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9545985.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实例6:python

#斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;指的是这样一个数列&#xff1a;0、1、1、2、3、5、8、13、21、34、……。 #F0 0 (n0) #F1 1 (n1) #Fn F[n-1] Fn-2 #!/usr/bin/python -- coding: UTF-8 -- #def fib(…

简述oracle的主要数据库对象,Oracle数据库数据对象分析

Oracle数据库数据对象分析Oracle数据库数据对象中最基本的是表和视图&#xff0c;其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习Oracle的捷径。表和视图Oracle中表是数据存储的基本结构。…

vue devtools面板没有显示_vue 基础入门(四)

vue 基础入门(四)1.全局配置Vue.config 是一个对象&#xff0c;包含 Vue 的全局配置。可以在启动应用之前修改下列 property&#xff1a;1.1 silent类型&#xff1a;boolean默认值&#xff1a;false用法&#xff1a;Vue.config.silent true❝取消 Vue 所有的日志与警告。❞1.2…

SpaceVim 语言模块 lua

原文连接&#xff1a; https://spacevim.org/cn/layers/lang/lua/ 模块简介启用模块快捷键 交互式编程运行当前脚本模块简介 这一模块为在 SpaceVim 中进行 lua 开发提供了支持&#xff0c;包括代码补全、语法检查、代码格式化、交互式编程以及调试等特性。 启用模块 可通过在配…

python之def

1.def &#xff08;define的前三个字母&#xff09;是一个关键字&#xff0c;用来声明函数。 2.def 声明函数的格式为&#xff1a; def 函数名(参数1&#xff0c;参数2&#xff0c;…&#xff0c;参数n)&#xff1a; 函数体 例如&#xff1a; def fib(n): print ‘n ’, n if n…

php pdo 00000,php-即使有错误,PDO错误代码也总是00000

我使用PHP 7.1.23测试了以下代码&#xff1a;$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);$sth $pdo->prepare(select now() and this is a bad sql where a - b from c);if ($sth false) {echo "error on prepare()\n";print_r($pdo->errorInf…

vue 生命周期_Vue生命周期小白看了都会的

最近一直在学习Vue&#xff0c;而vue生命周期是我们不可能绕开的一个很核心的知识点&#xff0c;今天来简单的梳理一下大概的内容。一、钩子函数在一开始学习的时候&#xff0c;总有钩子函数这个名词冒出来&#xff0c;而且在vue官网文档中也频繁出现&#xff0c;也相信给很多初…

Mac/Ubuntu 上编译、搭建 WebRtc/licode 服务器

1.下代码 git clone https://github.com/ging/licode.git cd licode 2.安装依赖 2.1 配置ubuntu开发环境&#xff1a; 2.1.1 安装C/C开发环境 1. sudo apt-get -y install build-essential //安装主要编译工具 gcc, g, make 2. sudo apt-get -y install autoconf automake1.9 3…

实例7:python

#将一个列表的数据复制到另一个列表中。 #程序分析&#xff1a;使用列表[:]。 #程序源代码&#xff1a; #!/usr/bin/python -- coding: UTF-8 -- #a [1, 2, 3] #b a[:] #print (b) #import copy #a [1, 2, 3] #bcopy.copy(a) #print(b) #[1, 2, 3] #使用 Python3 的参…

Python3 字典 copy()方法

描述 Python 字典 copy() 函数返回一个字典的浅复制。 语法 copy()方法语法&#xff1a; dict.copy() 参数 • NA。 返回值 返回一个字典的浅复制。 实例 以下实例展示了 copy()函数的使用方法&#xff1a; 实例 #!/usr/bin/python3 dict1 {‘Name’: ‘Runoob’, ‘Age’: 7,…

php为什么搜不到字段,php-通过多个字段搜索.有时一个领域,有时不止一个领域

我有搜索表.在这里多个领域.有时我将使用一个字段提交表单,有时将使用两个字段提交表单,有时使用多个字段值.if (isset($_POST[search])) {$projectName $_POST[pName];$clientId $_POST[s_by_clientName];$departmentId $_POST[s_by_department];$statusName $_POST[s_by_…

python语言key_Python语言学习:字典常用的方法

1. 增加&#xff1a;字典[key]value(不存在的key和value)info{stu1101:TengLan,stu1102:LuoZe,stu1103:XiaoZe}info[stu1104]crystalprint(info) #输出结果&#xff1a;{stu1101: TengLan, stu1102: LuoZe, stu1103: XiaoZe, stu1104: crystal}2. 修改&#xff1a;字典[key]val…

python 运算及注释

""" 上面的两行代码&#xff0c;在2.0的python中&#xff0c;若想执行含有汉字的代码&#xff0c;是必不可少的&#xff0c;且两行代码必写在单个py文件最上方&#xff0c;之间不可有任何字节。且该两行代码&#xff0c;可在pycharm,设置中&#xff0c;直接设置…

实例8:python

#输出 9*9 乘法口诀表。 #!/usr/bin/python -- coding: UTF-8 -- #for i in range(1, 10): print for j in range(1, i1): print ("%d*%d%d" % (i, j, i*j),) #!/usr/bin/python3 i0 j0 while i<9: i1 while j<9: j1 print(j,“x”,i,"",i*j,…

php gd gif动画,我可以检测使用PHP和GD的animationGIF?

在imagecreatefromgif()函数的PHP手册页中有一个简短的代码片段&#xff0c;应该是你所需要的&#xff1a;由ZeBadger提供的图片评论&#xff03;59787在search同样问题的解决scheme时&#xff0c;我注意到php.net网站对Davide和Kris所指代码的后续操作&#xff0c;但根据作者的…

ant man 什么意思_浅谈为什么很多蓝牙模块厂家选择nRF52832?

浅谈为什么很多蓝牙模块厂家选择nRF52832&#xff1f;现在蓝牙低功耗(BLE)SOC作为新一代蓝牙&#xff0c;以其低功耗的优势&#xff0c;正凸显出强大的市场竞争力&#xff0c;而其中Nordic公司的nRF52832这一款低功耗蓝牙芯片更是受到大家的欢迎。Nordic是一家无晶圆厂半导体公…

实例9:python

#题目&#xff1a;暂停一秒输出。 #程序分析&#xff1a;使用 time 模块的 sleep() 函数 #!/usr/bin/python -- coding: UTF-8 -- import time l[1,2,3,4] for i in range(len(l)): print (l[i]) time.sleep(5) # 暂停一秒输出

php对话框制作,织梦系统“提示窗口对话框类”详解,oxwindow.class.php、catalog_do.php...

如果对织梦系统做过二次开发或学深入研究过的话&#xff0c;一定会知道在我们做织梦二次开发时&#xff0c;一般会把php文件以及对应的模板文件起的名字&#xff0c;除了扩展名外&#xff0c;其它都一样&#xff0c;这是织梦文件起名的一个特点。例如&#xff0c;index_body.ph…

B-JUI文档、下载

概述 特别说明 本文档仅适用于最新版的B-JUI&#xff0c;网站首页或下载页可以查看B-JUI的最后更新时间。 B-JUI前端管理框架适用于快速开发各类WEB管理系统&#xff0c;可与任意后端程序&#xff08;java、php、.net...&#xff09;配合使用。 B-JUI基于Bootstrap样式及jQuery…

Python time sleep()方法

描述 Python time sleep() 函数推迟调用线程的运行&#xff0c;可通过参数secs指秒数&#xff0c;表示进程挂起的时间。 语法 sleep()方法语法&#xff1a; time.sleep(t) 参数 • t – 推迟执行的秒数。 返回值 该函数没有返回值。 实例 以下实例展示了 sleep() 函数的使用方法…