题目:https://www.luogu.org/problemnew/show/P3195

第一次用斜率优化...其实还是有点云里雾里的;

网上的题解都很详细,我的理解就是通过把式子变形,假定一个最优解,得到的是一条直线,斜率已知;

然后找到最接近这个最优斜率的点作为答案;

同时发现斜率单调递增,所以可以用单调队列;

代码是惊人地短呢;

还有一个问题,就是下面这篇代码中注释掉的那句会WA,可是我觉得它不过是把下面一句展开了而已啊?

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef double db;
int const maxn=;
int n,l,q[maxn];
db sum[maxn],f[maxn];
db a(int i){return sum[i]+i;}
db b(int i){return sum[i]+i+l+;}
db y(int i){return f[i]+b(i)*b(i);}
db x(int i){return b(i);}
db slope(int i,int j){return (y(i)-y(j))/(x(i)-x(j));}
int main()
{
scanf("%d%d",&n,&l);
for(int i=;i<=n;i++)
{
scanf("%lf",&sum[i]);
sum[i]+=sum[i-];
}
int head=,tail=;
for(int i=;i<=n;i++)
{
while(head<tail&&slope(q[head],q[head+])<*a(i))head++;
// f[i]=y(q[head])-2*a(i)*b(q[head])+a(i)*a(i);
f[i]=f[q[head]]+(a(i)-b(q[head]))*(a(i)-b(q[head]));
while(head<tail&&slope(q[tail-],q[tail])>slope(q[tail-],i))tail--;
q[++tail]=i;
}
printf("%lld",(long long)f[n]);
return ;
}

最新文章

  1. 人才市场的IT职位分析
  2. php://input
  3. Java 读取Properties文件时应注意的路径问题
  4. IoC模式
  5. (转)listview中常见难题总结
  6. javascript中的删除方法
  7. 【HDU 3966】Aragorn&#39;s Story(未完待续)
  8. leap motion
  9. BZOJ 1060 时态同步
  10. IQC IPQC FQC OQC QA QE SQE CQS QM 简介区别
  11. 【摘自网络】dll库和lib库有什么区别
  12. 28.Django cookie
  13. 【JavaScript中typeof、toString、instanceof、constructor与in】
  14. JavaScript数据结构与算法(六) 链表的实现
  15. ZooKeeper客户端事件串行化处理
  16. LVS (一) 原理
  17. 白鹭引擎 - 文本类型 ( TextField, )
  18. $.cookie()取值设置
  19. EXPLAIN执行计划中要重点关注哪些要素(转)
  20. Makefile学习之路6——让编译环境更加有序

热门文章

  1. luogu P1704 寻找最优美做题曲线
  2. noip2013货车运输
  3. codeforces edu40
  4. Java面向对象练习题
  5. java基础之IO流(二)之字符流
  6. 前端MVC Vue2学习总结(九)——Vuex状态管理插件
  7. MFC 小知识总结三
  8. Android 平板中 自己定义键盘(popuwindow) 居于屏幕左下方 仿微信的password输入界面
  9. TinyXML:TiXmlNode
  10. 网页Html代码优化及分析