Link

题目大意:一段区间的贡献是\(ax^2+bx+c,x=\sum v\),求一个划分让总区间的价值最大。分段必须连续。

\(\text{Solution:}\)

设计\(dp[i]\)表示前\(i\)个人的最佳划分价值。那么有转移:

\[dp[i]=\max_{j<i}dp[j]+a(\sum_{j+1\to i}v)^2+b(\sum_{j+1\to i}v)+c
\]

显然\(n^2\)的\(dp.\)

搞一下柿子,令\(sum_i\)表示\([1,i]\)的和。

\[dp[i]=dp[j]+a(sum[i]-sum[j])^2+b(sum[i]-sum[j])+c
\]
\[dp[i]=dp[j]+a(sum[i]^2+sum[j]^2-2sum[i]sum[j])+bsum[i]-bsum[j]+c
\]
\[dp[i]=dp[j]+asum[i]^2+asum[j]^2-2asum[i]sum[j]+bsum[i]-bsum[j]+c
\]
\[dp[j]+asum[j]^2-bsum[j]=2asum[i]sum[j]+dp[i]-c-bsum[i]-asum[i]^2
\]

此时\(y=dp[j]+asum[j]^2-bsum[j],k=2asum[i],x=sum[j],b=dp[i]-c-bsum[i]-asum[i]^2\)最大化截距维护上凸壳即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,A,B,C,sum[2000010],v[2000010];
int tail,head,q[2000010],dp[2000010];
int Y(int x){return dp[x]+A*sum[x]*sum[x]-B*sum[x];}
int X(int x){return sum[x];}
long double slope(int x,int y){return (long double)(Y(y)-Y(x))/(X(y)-X(x));}
int cost(int i,int j){return A*(sum[i]-sum[j])*(sum[i]-sum[j])+B*(sum[i]-sum[j])+C;}
signed main(){
/*
dp[j]+Asum[j]^2-Bsum[j]=2Asum[i]sum[j]+dp[i]-Asum[i]^2-Bsum[i]-C
y=dp[j]+Asum[j]^2-Bsum[j],k=2Asum[i],x=sum[j],b=dp[i]-Asum[i]^2-Bsum[i]-C
*/
scanf("%lld%lld%lld%lld",&n,&A,&B,&C);
for(int i=1;i<=n;++i)scanf("%lld",&v[i]),sum[i]=sum[i-1]+v[i];
head=tail=1;q[head]=0;
for(int i=1;i<=n;++i){
while(head<tail&&slope(q[head],q[head+1])>=2.0*A*sum[i])head++;
dp[i]=dp[q[head]]+cost(i,q[head]);
while(head<tail&&slope(q[tail-1],q[tail])<=slope(q[tail-1],i))tail--;
q[++tail]=i;
}
printf("%lld\n",dp[n]);
return 0;
}

值得一提的是,原本在写进队出队判断的时候带上等于是错的,后来发现是精度被卡了。所以尽量用\(\text{long double.}\)

最新文章

  1. ASP.NET MVC之表单集合数据自动绑定到对象属性(集合)中
  2. EXCEL技巧——SUBTOTAL函数巧妙应用
  3. C#:生成短网址
  4. Chrome扩展程序的二次开发:把它改得更适合自己使用
  5. CSS 仿Excel表格功能
  6. Mysql 学习
  7. MySQL数据库MyISAM和InnoDB存储引擎的比较
  8. 准备Activiti的开发环境
  9. 关于ProgressBar的美化问题
  10. Java基础知识强化78:正则表达式之获取功能(案例)
  11. avalon学习笔记一 列表及条件过滤
  12. atoi 和itoa用法
  13. 【.NetRemoting-3】2015.09.18
  14. Cocostudio学习笔记(4) LoadingBar+ TextField
  15. grasp设计模式笔记回顾
  16. 查看Windows支持的内存大小
  17. Java集合框架梳理(含经典面试题)
  18. Laravel框架中Form表单Get请求搜索(在此感谢[https://simon8.com])
  19. STL源码剖析 — 空间配置器(allocator)
  20. table中的一些另类标签

热门文章

  1. P4719 【模板】&quot;动态 DP&quot;&amp;动态树分治
  2. 使用powershell完成定时get任务
  3. [工作积累] shadowmap 改进
  4. servlet web项目连接数据库报错
  5. 计算Pi
  6. 20190928-01Redis五大数据类型之Hash和Zset 000 029
  7. pwnable之random
  8. python pickle库
  9. Solr专题(三)SSM项目整合Solr
  10. Python实现加密的ZIP文件解压(密码已知)