终于明白斜率优化了、

这种东西说简单也简单,说难也难、还是看个人的理解角度

就是利用斜率单调、x单调这两个性质,使得新的函数直线越来越陡,越来越往右(或相反)

答案是拿这个直线去卡以前最优值的点,这样x、y、斜率都已知,就可以求截距b了

这样截距难道不是单调的吗?其实不一定,因为求的时候要受j的影响,所以这个直线取完值后对应的y值不满足单调性(当前最优不一定是下一个最优)

就要维护凸包,就是要在几个单调性的基础上把一些怎么卡都不是最优的点去掉,,这些点就是不在凸包上的点

如果要求最小值,就维护下凸包,因为同样直线的情况下,下边缘是直线上移和左移最先碰到的

同理,如果要求最大值,就维护上凸包。

关于此题,先写出dp方程,根据模拟条件,易写出f[i]=min(f[i],f[i]+(i+qsum[i]-j-qsum[j]-L-1)^2);

由于项太多,拆时不好拆,故设s【i】=i+qsum【i】,L=L+1;

所以拆平方,可得:(没有任何化简)

在维护即可

码:

#include<iostream>
#include<cstdio>
using namespace std;
long long l,r,n,L,a[50005],f[50005],s[50005],q[50005];
double xl(long long a,long long b)
{return(double(f[b]+s[b]*s[b]-f[a]-s[a]*s[a]))/(double(s[b]-s[a]));
}
int main()
{scanf("%lld%lld",&n,&L);L++;for(int i=1;i<=n;i++){scanf("%lld",&s[i]);s[i]+=s[i-1];}for(int i=1;i<=n;i++)s[i]+=i;q[0]=0;for(int i=1;i<=n;i++){while(l<r&&xl(q[l],q[l+1])<=2*(s[i]-L))l++;int j=q[l];f[i]=f[j]+s[j]*s[j]+(s[i]-L)*(s[i]-L)-2*(s[i]-L)*s[j];while(l<r&&xl(q[r-1],q[r])>xl(q[r],i))r--;q[++r]=i;   }printf("%lld",f[n]);} 

2017.7.30 玩具装箱 思考记录相关推荐

  1. 2017.9.30 物流运输 思考记录

    总结做完了,本来今天不打算写题的,但闲的 被自己以前的想法坑了. 首先,每换一次路就要管一个区间的,所以换路作为决策进行dp 所以预处理满足每一段区间的最短路,来进行区间决策. 一开始想按点决策,发现 ...

  2. 2017.10.30 覆盖问题 思考记录

    从细节入手已经从一种技巧变成一种策略了. 题目给出的条件很奇怪,是3个正方形,, 为什么是3个而不是4个或2个呢.. 于是先用一个大矩形把所有点卡住 然后显然矩形的每个边 都有一个正方形和他在一条直线 ...

  3. 2017.3.24 分裂游戏 思考记录

    事先说明:这不是好题解,这只是思考记录 同机房的xp都学博弈了..    感觉还是学学看吧 先来看一下简单的nim: 题目: Alice和Bob放置了N堆不同的石子,编号1..N,第i堆中有A[i]个 ...

  4. 2017.10.24 上升序列 思考记录

    终于有会做的题了... 一开始想用正常的lis ,然后从前往后扫, 由于最优查询区间在序列上是按顺序单调递增的,所以想记录每个点取哪个值跳到哪,这样是n*m logn的 然后发现既然是单调递增的那直接 ...

  5. 2017.10.17 蜘蛛难题 思考记录

    强烈建议不要做此题,此题描述差到极点!毒瘤出题人 首先有想法就是从起点往后按照出水管依次满足,但多个水域需要合起来求下一个最低出水口,所以并不是很好维护 所以最好按照时间模拟 先求出当前状态下的最低水 ...

  6. 2017.10.7 括号序列 思考记录

    这个题看起来很简单,但细节比较麻烦.参考完别人的代码后才想出自己的解法的.. 一开始认为已匹配的括号是可以直接消的,所以就只维护了两个变量 但还有区间取反.. 由于和已配对的括号的顺序有关,所以不是很 ...

  7. 2017.9.28 约数研究 思考记录

    这个题一开始可能会想复杂, 然而它需要对答案的贡献进行归类 可以发现,一个约数对其倍数的数贡献是一样的,,所以可以考虑离散 所以直接对于每个数不好求,就可以考虑每个约数的贡献 而每个约数i就有n/i个 ...

  8. 2017.5.29-6.3 城市规划 思考记录(非常不容易)

    这个题就是让线段树维护区间连通性 用并查集维护,传左右端点的联通情况就可以了 但是,这题的实际难度在于怎么让它们正确的合并? 会出现非常多的问题: 1.子节点能否和父节点共用一个并查集?明显不行,有可 ...

  9. 2017.5.11 道路修建 思考记录

    这个线段树一眼秒了(主要是有前面的思考经验) 就是维护两个列对应线段上的形态.,比较好想的 但数据结构题有个特点--使你知道结构也不会做----会做也会很大概率爆零.... 所以数据结构题必须 小数据 ...

最新文章

  1. java 验证码图片识别_JavaSE图像验证码简单识别程序详解
  2. ionic3中使用自定义配置
  3. Eclipse 3.6 更新中文语言包的方法
  4. 程序文档的重要性理解
  5. 在指定位置上方出现通用jquery悬浮提示框插件全站通用
  6. springMVC从上传的Excel文件中读取数据
  7. Elasticsearch--进阶-bool复合查询---全文检索引擎ElasticSearch工作笔记013
  8. uefiboot 文件_UEFI启动文件bootx64.efi的定制
  9. 虚拟仿真实验项目所需服务器,工程结构虚拟仿真实验室
  10. Shiro的退出登录状态的方式
  11. android权限的最佳运用
  12. Arduino ESP32 ADC功能介绍以及模拟量信号读取示例
  13. codeforces1359C Mixing Water
  14. [附源码]计算机毕业设计Python+uniapp汽车票管理系统APP65qfl(程序+lw+APP+远程部署)
  15. 适用于 Windows 10/11 电脑 的 5 大好用的离线录屏软件
  16. 用python编程解一元二次方程
  17. 京东区块链之科普篇:京东在区块链技术领域的应用与布局
  18. java controller注解原理_SpringMVC运行流程与原理【Controller接口实现注解实现】
  19. 全网首发:relocation R_X86_64_PC32 against symbol can not be used when making a shared object recompile
  20. js 点击按钮打开浏览器新页签,兼容版

热门文章

  1. Spike Timing–Dependent Plasticity: A Hebbian Learning Rule ///STDP时空依赖可塑性
  2. 开源项目cardslib简单介绍和导入eclipse并运行的方法
  3. Python练习:合格率的计算
  4. time()函数php_time()
  5. python读取word文档结构图_python根据文章标题内容自动生成摘分享的实例
  6. idea中的一个子模块中的pom文件带横线、maven为灰色
  7. C语言程序设计double,C语言中double类型数据占字节数为
  8. 华为手机_text是什么文件_华为学习文档资料
  9. pictureselector 压缩_Android 多图选择器PictureSelector 使用
  10. Python-使用jmespath来格式化处理json数据