【动态规划】【斜率优化】CDOJ1689 分序列
2024-08-27 07:17:14
斜率优化裸题,模型可以看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;
}
最新文章
- winform app.config文件的动态配置
- kvm相关文章
- C#中ROUND函数的问题 解决
- 安装Ubuntu双系统系列——更换源
- 影响MySQL性能的五大配置参数
- 利用宏定义实现C++程序在Unix和Win32环境下的通用性
- android:shape属性详解
- Linux下多线程编程遇到的一些问题
- STM32中GPIO的8种工作模式
- pygame 笔记-4 代码封装&;发射子弹
- jq修改导航栏样式(选中、使用两张图片替代的是否选中效果)
- 设计模式之迭代器模式(Iterator)
- 线特征---LSD算法(二)
- EF DataFirst修改数据类型
- linux命令大全网站
- 小白扫盲:Android 设备的CPU类型(通常称为”ABIs”)
- js回车、ESC、F2按钮事件
- 2018.09.15 hdu3018Ant Trip(欧拉路)
- SmartUpload工具上传文件步骤
- 响应式布局和BootStrap 全局CSS样式
热门文章
- 【转】debian下的update-rc.d的使用
- centos 安装flash
- 看jquery3.3.1学js类型判断的技巧
- binlog2sql 回滚误操作
- VPS性能测试(2):内存大小、交换空间、高速缓存、实际使用内存
- vue数据绑定方式:
- Java显式锁学习总结之一:概论
- HDU 3480 Division(斜率DP裸题)
- LeetCode解题报告—— 1-bit and 2-bit Characters &; 132 Pattern &; 3Sum
- Zookeeper之Curator(1)客户端对节点的一些监控事件的api使用