bzoj 3156: 防御准备
这个题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: 防御准备相关推荐
- BZOJ 3156: 防御准备( dp + 斜率优化 )
dp(i)表示处理完[i,n]且i是放守卫塔的最小费用. dp(i) = min{dp(j) + (j-i)(j-i-1)/2}+costi(i<j≤N) 然后斜率优化 ------------ ...
- bzoj 3156: 防御准备(斜率DP)
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2148 Solved: 912 [Submit][Status][Discu ...
- php m grep event,linux grep (linux查找关键字在php出现的次数)
http://www.th7.cn/system/lin/201508/127681.shtml 查找CleverCode在当前目录以及子目录,所有的php出现大于0的次数. # find -type ...
- linux 不同电脑cp,linux命令:拷贝命令家族(cp、scp、rsync)
Linux命令中:rsync和cp之间的区别 - 小 楼 一 夜 听 春 雨 - 博客园 https://www.cnblogs.com/kex1n/p/7008178.html cp,scp,rsy ...
- 【BZOJ-3156】防御准备 DP + 斜率优化
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 951 Solved: 446 [Submit][Status][Discus ...
- OI 刷题记录——每周更新
每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...
- BZOJ刷题记录---提高组难度
BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...
- BZOJ 3323: [Scoi2013]多项式的运算
Description 某天,mzry1992 一边思考着一个项目问题一边在高速公路上骑着摩托车.一个光头踢了他一脚,摩托车损坏,而他也被送进校医院打吊针.现在该项目的截止日期将近,他不得不请你来帮助 ...
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
最新文章
- 业界丨《自然》:中国打响AI人才争夺战
- c bool 类型检查_C语言和C+的区别是什么?8个点通俗易懂的告诉你!
- leetcode算法题--回文子串
- usb-to-isp-for-stm32
- Java程序员从笨鸟到菜鸟之(八十五)跟我学jquery(一)爱之初体验jquery
- 《D3.js数据可视化实战手册》——2.5 使用子选择器
- 性能分布式NewLife.XCode对无限数据的支持
- linux笔记之 搭建本地yum源,网卡的基本操作
- leafLet API 中文文档翻译
- LeetCode 356. 直线镜像
- Struts2基础知识(二)
- [编辑修订01]git 常用命令和Gerrit的联合使用常用命令
- 别说我不懂排序!几种常见排序算法(一)
- SQL Proc(存储过程)/tran(事物)
- 免费资源:Polaris UI套件 + Linecons图标集(AI, PDF, PNG, PSD, SVG)
- LPWAN——Sigfox实战经验介绍
- 泰坦尼克号预测结果分析报告
- 可禁用计算机服务,哪些Microsoft服务项目可以禁用以提高 电脑速度
- typora 编辑器菜单栏不见了:打开了一体化模式
- Android 11.0 蓝牙的启用和禁用