博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P3628 [APIO2010]特别行动队(斜率优化)
阅读量:5797 次
发布时间:2019-06-18

本文共 1735 字,大约阅读时间需要 5 分钟。

 

先写出转移方程$$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
3 #include
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 num16 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
k) ++h;30 dp[i]=dp[q[h]]+check(sum[i]-sum[q[h]]);31 while(h

 

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

你可能感兴趣的文章
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
LNMP一键安装
查看>>
SQL Server数据库概述
查看>>
Linux 目录结构及内容详解
查看>>
startx命令--Linux命令应用大词典729个命令解读
查看>>
华为3026c交换机配置tftp备份命令
查看>>
Oracle命令导入dmp文件
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
Http、TCP/IP协议与Socket之间的区别(转载)
查看>>
解决Unable to load R3 module ...VBoxDD.dll (VBoxDD):GetLastError=1790
查看>>
.net excel利用NPOI导入oracle
查看>>
vrpie在Visio Studio 中无法调试的问题
查看>>
第六课:数据库的基本工具
查看>>
关于二叉树重构的思索
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
skynet实践(8)-接入websocket
查看>>
系统版本判断
查看>>
关于Css选择器优先级
查看>>