这个题2333,有一个情况就是从一个点i一直山底的,直接计算出答案,一个是到山顶的,用斜率优化来算,最后答案是两个加起来(可能会说反)

最后,本蒟蒻来BB一下对斜率优化的理解吧。

其实就是无脑的写一个f[i]从f[j]转移来的式子,在搞一个j,k一个大,一个小,用小(大)于号连起来,变一下形,让左边存在未知数(j,k)右边是关于i的式子

有了式子之后,(因为我太弱,只能随便理解,如有错误,希望大神指出),如果是小于号,肯定是左边越小越优,(小于号就小,很有道理吧,,其实本蒟蒻是假设一些值不变,然后要使左边变小,需要变那些值,类似于物理分析),然后,大于号反过来呗。

 1 #include <bits/stdc++.h>
 2 #define LL  long long
 3 #define lowbit(x) x&(-x)
 4 #define inf 0x3f3f3f3f
 5 #define eps 1e-5
 6 #define N 1000005
 7 using namespace std;
 8 inline LL ra()
 9 {
10     LL x=0,f=1; char ch=getchar();
11     while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}
12     while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
13     return x*f;
14 }
15 LL f[N],ans=(1LL<<60);
16 LL cst[N],q[N];
17 LL n;
18 LL slope(LL j, LL k)
19 {
20     return (2*f[j]+j*j-2*f[k]-k*k);
21 }
22 int main()
23 {
24     n=ra();
25     for (LL i=1; i<=n; i++) cst[n-i+1]=ra();
26     f[1]=cst[1];
27     LL l=1,r=1; q[1]=1;
28     ans=min(ans,f[1]+n*(n-1)/2);
29     for (LL i=2; i<=n; i++)
30     {
31         while (l<r && slope(q[l+1],q[l])<=(i*2-1)*(q[l+1]-q[l])) l++;
32         LL t=q[l];
33         f[i]=f[t]+(i-t-1)*(i-t)/2+cst[i];
34         ans=min(ans,f[i]+(n-i)*(n-i+1)/2);  //!!!!!!
35         while (l<r && slope(i,q[r])*(q[r]-q[r-1])<=slope(q[r],q[r-1])*(i-q[r])) r--;
36         q[++r]=i;
37     }
38     cout<<ans;
39     return 0;
40 }

转载于:https://www.cnblogs.com/ccd2333/p/6545037.html

bzoj 3156: 防御准备相关推荐

  1. BZOJ 3156: 防御准备( dp + 斜率优化 )

    dp(i)表示处理完[i,n]且i是放守卫塔的最小费用. dp(i) = min{dp(j) + (j-i)(j-i-1)/2}+costi(i<j≤N) 然后斜率优化 ------------ ...

  2. bzoj 3156: 防御准备(斜率DP)

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2148  Solved: 912 [Submit][Status][Discu ...

  3. php m grep event,linux grep (linux查找关键字在php出现的次数)

    http://www.th7.cn/system/lin/201508/127681.shtml 查找CleverCode在当前目录以及子目录,所有的php出现大于0的次数. # find -type ...

  4. linux 不同电脑cp,linux命令:拷贝命令家族(cp、scp、rsync)

    Linux命令中:rsync和cp之间的区别 - 小 楼 一 夜 听 春 雨 - 博客园 https://www.cnblogs.com/kex1n/p/7008178.html cp,scp,rsy ...

  5. 【BZOJ-3156】防御准备 DP + 斜率优化

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 951  Solved: 446 [Submit][Status][Discus ...

  6. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

  7. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  8. BZOJ 3323: [Scoi2013]多项式的运算

    Description 某天,mzry1992 一边思考着一个项目问题一边在高速公路上骑着摩托车.一个光头踢了他一脚,摩托车损坏,而他也被送进校医院打吊针.现在该项目的截止日期将近,他不得不请你来帮助 ...

  9. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

最新文章

  1. 业界丨《自然》:中国打响AI人才争夺战
  2. c bool 类型检查_C语言和C+的区别是什么?8个点通俗易懂的告诉你!
  3. leetcode算法题--回文子串
  4. usb-to-isp-for-stm32
  5. Java程序员从笨鸟到菜鸟之(八十五)跟我学jquery(一)爱之初体验jquery
  6. 《D3.js数据可视化实战手册》——2.5 使用子选择器
  7. 性能分布式NewLife.XCode对无限数据的支持
  8. linux笔记之 搭建本地yum源,网卡的基本操作
  9. leafLet API 中文文档翻译
  10. LeetCode 356. 直线镜像
  11. Struts2基础知识(二)
  12. [编辑修订01]git 常用命令和Gerrit的联合使用常用命令
  13. 别说我不懂排序!几种常见排序算法(一)
  14. SQL Proc(存储过程)/tran(事物)
  15. 免费资源:Polaris UI套件 + Linecons图标集(AI, PDF, PNG, PSD, SVG)
  16. LPWAN——Sigfox实战经验介绍
  17. 泰坦尼克号预测结果分析报告
  18. 可禁用计算机服务,哪些Microsoft服务项目可以禁用以提高 电脑速度
  19. typora 编辑器菜单栏不见了:打开了一体化模式
  20. Android 11.0 蓝牙的启用和禁用

热门文章

  1. java静态代码块和构造方法_Java静态代码块和构造方法执行顺序
  2. git cherry pick
  3. pandas 聚合函数
  4. Hadoop HIVE 复合数据类型
  5. C++ string容器
  6. 天津医科大学计算机科学与技术,天津医科大学生物医学工程学院
  7. mysql中怎么表示100美元_MySQL 事物,美国服务器
  8. Docker学习总结(54)——save,load,import 命令有何区别
  9. Redis学习总结(15)——Redis 基本数据类型使用场景
  10. 在微软5年,我学到的几个小技能