斜率优化裸题,模型可以看http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html

#include<cstdio>
#include<deque>
using namespace std;
#define EPS 1e-8
typedef long long ll;
deque<int>q;
int n;
ll m,sum[500010],f[500010];
//借鉴了:http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html
ll getDP(int i,int j){
return f[j]+m+(sum[i]-sum[j])*(sum[i]-sum[j]);
}
ll getUP(int j,int k){//yj-yk,即斜率的分子部分
return (f[j]+sum[j]*sum[j])-(f[k]+sum[k]*sum[k]);
}
ll getDOWN(int j,int k){//xj-xk,即斜率的分母部分
return 2ll*(sum[j]-sum[k]);
}
int main(){
freopen("k.in","r",stdin);
while(scanf("%d%lld",&n,&m)!=EOF){
for(int i=1;i<=n;++i){
scanf("%lld",&sum[i]);
}
for(int i=2;i<=n;++i){
sum[i]+=sum[i-1];
}
q.clear();
q.push_back(0);
for(int i=1;i<=n;++i){
while(q.size()>1 && getUP(q[1],q[0])<=sum[i]*getDOWN(q[1],q[0])){
q.pop_front();
}
f[i]=getDP(i,q.front());
while(q.size()>1 && getUP(i,q.back())*getDOWN(q.back(),q[q.size()-2])<=getUP(q.back(),q[q.size()-2])*getDOWN(i,q.back())){
q.pop_back();
}
q.push_back(i);
}
printf("%lld\n",f[n]);
}
return 0;
}

最新文章

  1. winform app.config文件的动态配置
  2. kvm相关文章
  3. C#中ROUND函数的问题 解决
  4. 安装Ubuntu双系统系列——更换源
  5. 影响MySQL性能的五大配置参数
  6. 利用宏定义实现C++程序在Unix和Win32环境下的通用性
  7. android:shape属性详解
  8. Linux下多线程编程遇到的一些问题
  9. STM32中GPIO的8种工作模式
  10. pygame 笔记-4 代码封装&amp;发射子弹
  11. jq修改导航栏样式(选中、使用两张图片替代的是否选中效果)
  12. 设计模式之迭代器模式(Iterator)
  13. 线特征---LSD算法(二)
  14. EF DataFirst修改数据类型
  15. linux命令大全网站
  16. 小白扫盲:Android 设备的CPU类型(通常称为”ABIs”)
  17. js回车、ESC、F2按钮事件
  18. 2018.09.15 hdu3018Ant Trip(欧拉路)
  19. SmartUpload工具上传文件步骤
  20. 响应式布局和BootStrap 全局CSS样式

热门文章

  1. 【转】debian下的update-rc.d的使用
  2. centos 安装flash
  3. 看jquery3.3.1学js类型判断的技巧
  4. binlog2sql 回滚误操作
  5. VPS性能测试(2):内存大小、交换空间、高速缓存、实际使用内存
  6. vue数据绑定方式:
  7. Java显式锁学习总结之一:概论
  8. HDU 3480 Division(斜率DP裸题)
  9. LeetCode解题报告—— 1-bit and 2-bit Characters &amp; 132 Pattern &amp; 3Sum
  10. Zookeeper之Curator(1)客户端对节点的一些监控事件的api使用