2018.08.29 hdu3507 Print Article(斜率优化dp)
传送门
这应该算是斜率优化的模板题了。
就是要求打印n个数,每个数有一个参数a[i],每打印一段连续的数[l,r]需要的花费是(a[[l]+...+a[r])2+m" role="presentation" style="position: relative;">(a[[l]+...+a[r])2+m(a[[l]+...+a[r])2+m,要使得打印出所有数的代价最小。
用dp[i]表示打印1~i用的最小代价,显然有dp[i]=min(dp[j]+m+(sum[i]−sum[j−1])2)" role="presentation" style="position: relative;">dp[i]=min(dp[j]+m+(sum[i]−sum[j−1])2)dp[i]=min(dp[j]+m+(sum[i]−sum[j−1])2),对于两个不同的决策j,k(j>k),如果j比k优可以得到一个不等式,将它表示成一个斜率的形式发现维护这个斜率的单调性就可以O(1)转移了。
代码:
#include<bits/stdc++.h>
#define N 500005
using namespace std;
int f[N],q[N],sum[N],hd,tl,n,m;
inline int calc(int a,int b){return f[b]+m+(sum[a]-sum[b])*(sum[a]-sum[b]);}
inline int checky(int a,int b){return f[a]+sum[a]*sum[a]-f[b]-sum[b]*sum[b];}
inline int checkx(int a,int b){return (sum[a]-sum[b])*2;}
int main(){
while(scanf("%d%d",&n,&m)==2){
sum[0]=f[0]=0;
for(int i=1;i<=n;++i)scanf("%d",&sum[i]),sum[i]+=sum[i-1];
hd=0,tl=1,q[0]=0;
for(int i=1;i<=n;++i){
while(hd+1<tl&&checky(q[hd+1],q[hd])<=sum[i]*checkx(q[hd+1],q[hd]))++hd;
f[i]=calc(i,q[hd]);
while(hd+1<tl&&checky(i,q[tl-1])*checkx(q[tl-1],q[tl-2])<=checky(q[tl-1],q[tl-2])*checkx(i,q[tl-1]))--tl;
q[tl++]=i;
}
cout<<f[n]<<'\n';
}
return 0;
}
2018.08.29 hdu3507 Print Article(斜率优化dp)的更多相关文章
- HDU3507 Print Article —— 斜率优化DP
题目链接:https://vjudge.net/problem/HDU-3507 Print Article Time Limit: 9000/3000 MS (Java/Others) Mem ...
- HDU3507 Print Article(斜率优化dp)
前几天做多校,知道了这世界上存在dp的优化这样的说法,了解了四边形优化dp,所以今天顺带做一道典型的斜率优化,在百度打斜率优化dp,首先弹出来的就是下面这个网址:http://www.cnblogs. ...
- hdu3507 Print Article[斜率优化dp入门题]
Print Article Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)To ...
- [hdu3507 Print Article]斜率优化dp入门
题意:需要打印n个正整数,1个数要么单独打印要么和前面一个数一起打印,1次打印1组数的代价为这组数的和的平方加上常数M.求最小代价. 思路:如果令dp[i]为打印前i个数的最小代价,那么有 dp[i] ...
- HDU3507 Print Article (斜率优化DP基础复习)
pid=3507">传送门 大意:打印一篇文章,连续打印一堆字的花费是这一堆的和的平方加上一个常数M. 首先我们写出状态转移方程 :f[i]=f[j]+(sum[i]−sum[j])2 ...
- hdu 3507 Print Article(斜率优化DP)
题目链接:hdu 3507 Print Article 题意: 每个字有一个值,现在让你分成k段打印,每段打印需要消耗的值用那个公式计算,现在让你求最小值 题解: 设dp[i]表示前i个字符需要消耗的 ...
- 2018.09.29 bzoj3156: 防御准备(斜率优化dp)
传送门 斜率dp经典题目. 然而算斜率的时候并没有注意到下标的平方会爆int于是咕咕*2. 这道题我用了两个数组来表示状态. f[i]f[i]f[i]表示最后i个位置倒数第i个放木偶的最优值. g[i ...
- Print Article /// 斜率优化DP oj26302
题目大意: 经典题 数学分析 G(a,b)<sum[i]时 a优于b G(a,b)<G(b,c)<sum[i]时 b必不为最优 #include <bits/stdc++.h& ...
- hdu 3507 Print Article —— 斜率优化DP
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3507 设 f[i],则 f[i] = f[j] + (s[i]-s[j])*(s[i]-s[j]) + m ...
随机推荐
- springMVC获取用户的数据
打算记录网站的访问信息,没有眉目,下记下参考. SpringMVC-获得用户请求数据
- sitemap
sitemap对于网站就像是字典的索引目录,而这个目录的读者则是搜索引擎的爬虫.网站有了sitemap,有助于搜索引擎“了解”网站,这样会有助于站点的内容被收录. sitemap是一个由google主 ...
- Supervisor 进程管理工具
简介: Supervisor 进程管理工具 一.安装 shell > yum -y install python-pip shell > pip install supervisor # ...
- TEXT 6 Travelling with baggage
TEXT 6 Travelling with baggage 背着行囊去旅行 Feb 16th 2006 From The Economist print edition (1)FEW modern ...
- base和this
base//只能继承其直接基类成员 常用于对象初始化时和基类通信1.base局限于构造函数.实例方法.实例属性访问其中2.base调用直接基类已被重写的方法,或者所有父类的非重载方法3.base制定创 ...
- struts2 自带的 token防止表单重复提交拦截器
在struts2中,我们可以利用struts2自带的token拦截器轻松实现防止表单重复提交功能! 1. 在相应的action配置中增加: <interceptor-ref name=&quo ...
- Numpy统计
Numpy统计 axis=None 是统计函数的标配参数,默认不输入此参数则为对数组每一个元素进行计算,设定轴则对此轴上元素进行计算 1:常用统计函数 .sum(a,axis=None):数组a求和运 ...
- BIGDECIMAL 四舍五入等取舍问题
我输入的是1.35,但是电脑不可能取到整数,他的值如下:初始化数据:1.350000000000000088817841970012523233890533447265625ROUND_DOWN); ...
- conductor介绍
https://netflix.github.io/conductor/ https://github.com/Netflix/conductor 编译版: https://jcenter.bintr ...
- Web标准:七、横向导航菜单
Web标准:七.横向导航菜单 知识点: 1.横向列表菜单 2.用图片美化的横向导航 3.css Sprites 1)横向列表菜单 可以在第四节课的基础上来实现横向导航菜单,只要给li一个float ...