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
即 f[j] + s[j]*s[j] = 2*s[i]*s[j] + f[i] - s[i]*s[i] - m
于是维护下凸包即可;
写成 double 的 slp 总是不对,把分母乘到对面就对了...
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define db double
using namespace std;
typedef long long ll;
int const xn=5e5+;
int n,m,q[xn];
ll f[xn],s[xn];
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return f?ret:-ret;
}
ll y(int i){return (ll)s[i]*s[i]+f[i];}
ll up(int i,int j){return y(i)-y(j);}
ll dn(int i,int j){return s[i]-s[j];}
db slp(int a,int b){return 1.0*(y(a)-y(b))/(s[a]-s[b]);}
int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(f,,sizeof f);
for(int i=;i<=n;i++)scanf("%lld",&s[i]),s[i]+=s[i-];
int h=,t=;
for(int i=;i<=n;i++)
{
//while(h<t&&slp(q[h+1],q[h])<=2*s[i])h++;//<=
while(h<t&&up(q[h+],q[h])<=*s[i]*dn(q[h+],q[h]))h++;//顺序
f[i]=f[q[h]]+(ll)(s[i]-s[q[h]])*(s[i]-s[q[h]])+m;
//while(h<t&&slp(q[t],q[t-1])>=slp(i,q[t-1]))t--;//>=
while(h<t&&up(q[t],q[t-])*dn(i,q[t-])>=up(i,q[t-])*dn(q[t],q[t-]))t--;
q[++t]=i;
}
printf("%lld\n",f[n]);
}
return ;
}
hdu 3507 Print Article —— 斜率优化DP的更多相关文章
- hdu 3507 Print Article(斜率优化DP)
题目链接:hdu 3507 Print Article 题意: 每个字有一个值,现在让你分成k段打印,每段打印需要消耗的值用那个公式计算,现在让你求最小值 题解: 设dp[i]表示前i个字符需要消耗的 ...
- HDU 3507 Print Article 斜率优化
Print Article Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)To ...
- HDU3507 Print Article(斜率优化dp)
前几天做多校,知道了这世界上存在dp的优化这样的说法,了解了四边形优化dp,所以今天顺带做一道典型的斜率优化,在百度打斜率优化dp,首先弹出来的就是下面这个网址:http://www.cnblogs. ...
- HDU 3507 - Print Article - [斜率DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3507 Zero has an old printer that doesn't work well s ...
- 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
题目链接:https://vjudge.net/problem/HDU-3507 Print Article Time Limit: 9000/3000 MS (Java/Others) Mem ...
- [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 ...
- Print Article /// 斜率优化DP oj26302
题目大意: 经典题 数学分析 G(a,b)<sum[i]时 a优于b G(a,b)<G(b,c)<sum[i]时 b必不为最优 #include <bits/stdc++.h& ...
随机推荐
- C# 将long类型写入二进制文件用bw.Write(num);将其读出用long num= br.ReadInt64();
理由: 因为long类型是 System.Int64 (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方) 而long BinaryReader ...
- JS推断浏览器类型与版本号
在JS中推断浏览器的类型,预计是每一个编辑过页面的开发者都遇到过的问题.在众多的浏览器产品中.IE.Firefox.Opera.Safari........众多品牌却标准不一,因此时常须要依据不同的浏 ...
- VUE高仿饿了么app开发思维导图
来自互联网 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing
- vue native
1.示例 <el-icon icon="Setting" size="sm" @click.native="ceshi">< ...
- 向odoo贡献中文翻译
建议通过 osc-git向odoo贡献中文翻译 osc-git 是指'开源中国'的git平台. 网址是 http://git.oschina.net/ 注册osc-git 账号省略. ...
- 实战c++中的string系列--十六进制的字符串转为十六进制的整型(一般是颜色代码使用)
非常久没有写关于string的博客了.由于写的差点儿相同了.可是近期又与string打交道,于是荷尔蒙上脑,小蝌蚪躁动. 在程序中,假设用到了颜色代码,一般都是十六进制的,即hex. 可是server ...
- iOS 私有库的使用
最近项目说要用私有库 主要过程 创建两个库: 索引库 组件库 组件库 用git操作 比如更新代码 push 打tag等 索引库 存放组件的描述信息 也就是 .spec文件 这个文件和 ...
- python3短信接口使用
import http.client from urllib import parse host = "106.ihuyi.com" sms_send_uri = "/w ...
- Linux面试必问-对照目录内容的命令“Diff”具体解释
dir1下有个log_1.log dir2下有个log_2.log 两个文件例如以下: p_ylwu@VM_194_111_sles10_64:/home/jdxochen/exercise> ...
- JS计算网页停留时间
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...