bzoj 3156 防御准备(斜率DP)
3156: 防御准备
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 837 Solved: 395
[Submit][Status][Discuss]
Description
Input
第一行为一个整数N表示战线的总长度。
第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai。
Output
共一个整数,表示最小的战线花费值。
Sample Input
10
2 3 1 5 4 5 6 3 1 2
Sample Output
HINT
1<=N<=10^6,1<=Ai<=10^9
Source
【思路】
斜率优化DP。
唯一需要注意的是过程中数据超范围,需要特别声明一下。
为毛斜率DP都长一个样<_<
【代码1】
#include<cstdio>
#include<iostream>
using namespace std; typedef long long LL;
const int N = 1e6+;
struct point { LL x,y;
}q[N],now;
int n,L,R,a[N]; LL cross(point a,point b,point c) {
return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
}
void read(int& x) {
char c=getchar(); while(!isdigit(c)) c=getchar();
x=; while(isdigit(c)) x=x*+c-'' , c=getchar();
}
int main() {
//freopen("in.in","r",stdin);
//freopen("out.out","w",stdout);
read(n);
for(int i=;i<=n;i++) read(a[i]);
for(int i=;i<=n;i++) {
while(L<R && q[L].y-q[L].x*i >= q[L+].y-q[L+].x*i) L++;
now.x=i;
now.y=q[L].y-(LL)q[L].x*i+(LL)i*i+a[i];
while(L<R && cross(q[R-],q[R],now)<=) R--;
q[++R]=now;
}
printf("%lld",q[R].y-(LL)n*(n+)/); // (LL) n*(n+1)/2
return ;
}
Folding 1
【代码2】
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; typedef long long LL;
const int N = 1e6+; int n,L,R,a[N],q[N]; LL f[N]; double slop(int k,int j) {
return (double)(f[j]-f[k]+(LL)j*(j+)/-(LL)k*(k+)/)/(j-k);
}
void read(int& x) {
char c=getchar(); while(!isdigit(c)) c=getchar();
x=; while(isdigit(c)) x=x*+c-'' , c=getchar();
}
int main() {
//freopen("in.in","r",stdin);
//freopen("out.out","w",stdout);
read(n);
for(int i=;i<=n;i++) read(a[i]);
for(int i=;i<=n;i++) {
while(L<R && slop(q[L],q[L+])<i) L++;
int t=q[L];
f[i]=f[t]+(LL)i*(i-t)+(LL)t*(t+)/-(LL)i*(i+)/+a[i];
while(L<R && slop(q[R-],q[R])>slop(q[R],i)) R--;
q[++R]=i;
}
printf("%lld",f[n]);
return ;
}
Folding 2
bzoj 3156 防御准备(斜率DP)的更多相关文章
- BZOJ 3156: 防御准备 斜率优化DP
3156: 防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...
- 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】
就是套路咯,设s[i]为1+2+...i 首先列出dp方程\( f[i]=min(f[j]+a[i]+(i-j)*i-(s[i]-s[j])) \) 然后推一推 \[ f[i]=f[j]+a[i]+( ...
- BZOJ 3156 防御准备
也是斜率优化....推下式子就好了. #include<iostream> #include<cstdio> #include<cstring> #include& ...
- bzoj3156防御准备 斜率优化dp
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2279 Solved: 959[Submit][Status][Discuss ...
- bzoj 1597 斜率DP
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5115 Solved: 1897[Submit] ...
- bzoj4518: [Sdoi2016]征途--斜率DP
题目大意:把一个数列分成m段,计算每段的和sum,求所有的sum的方差,使其最小. 由方差*m可以化简得ans=m*sigma(ki^2)-sum[n]^2 很容易得出f[i][j]=min{f[i- ...
- hdu 3507 斜率dp
不好理解,先多做几个再看 此题是很基础的斜率DP的入门题. 题意很清楚,就是输出序列a[n],每连续输出的费用是连续输出的数字和的平方加上常数M 让我们求这个费用的最小值. 设dp[i]表示输出前i个 ...
- 斜率dp cdq 分治
f[i] = min { f[j] + sqr(a[i] - a[j]) } f[i]= min { -2 * a[i] * a[j] + a[j] * a[j] + f[j] } + a[i] * ...
随机推荐
- font awesome icon
http://fontawesome.io/icons/ http://www.bootstrapicons.com/
- SQLSERVER2008 显示列信息,包含扩展属性
select b.name as table_name,a.name as column_name,t.name type_name ,a.max_length ,a.precision ...
- Oracle学习第三讲
关联查询 笛卡尔积 指做关联操作的每个表的每一行都和其他表的每一行组合,假设两个表的记录条数分别为x和y,笛卡尔积将返回x*y条记录 例如:select count(*) from emp; sele ...
- Graphics类绘制图形
1. 画直线 void drawLine(int startX,int startY,int endX,int endY); 四个参数分别为:起始点的x坐标和y坐标以及终点的x坐标和y坐标,该方法用于 ...
- Function.prototype.apply()
文章地址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply ...
- js获取天气
我们经常看到有的网站显示天气信息,它是怎么做出来的呢?今天就来分享一些关于js调用天气API的几种做法. 网上也能找到很多种方法,但是一般都是免费的不好用,好用的不免费. 以前用过新浪的天气api,查 ...
- 轻松使用px为单位开发移动端页面
研究移动端页面已经有许久了,一直执着于rem来开发,不谈性能怎么样,单从工作效率上看影响了不少,首先要固定设计稿的宽度,一般都是固定在640px,然后在根据根目录的字体大小来计算出每个元素的rem的值 ...
- 【python之旅】python的模块
一.定义模块: 模块:用来从逻辑上组织python代码(变量.函数.类.逻辑:实现一个功能),本质就是以.py结尾的python文件(文件名:test.py ,对应的模块名就是test) 包:用来从逻 ...
- python包管理器pip
步骤一:下载pip包 https://pypi.python.org/pypi/pip 步骤二:安装pip包 解压后,到pip包目录执行: python setup.py install 步骤三:添加 ...
- RHEL 7特性说明(六):集群
来自:Linux中国 2014-07-16 00:00:00 ed Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶 ...