HDU3507 Print Article (斜率优化DP基础复习)
pid=3507">传送门
大意:打印一篇文章,连续打印一堆字的花费是这一堆的和的平方加上一个常数M。
首先我们写出状态转移方程 :f[i]=f[j]+(sum[i]−sum[j])2+M;
设 j 优于 k.
那么有 f[j]+(sum[i]−sum[j])2<f[k]+(sum[i]−sum[k])2
移项得出
(f[j]+sum[j]2)−(f[k]+sum[j]2)2∗(sum[j]+sum[k])<sum[i]
这就是一个非常理想的斜率式了。
#include<cstdio>
#include<cctype>
const int MAXN = 5 * 1e6;
void GET(int &n)
{
char c, f=1;n=0;
do{c=getchar(); if(c=='-')f=-1;}while(!isdigit(c));
while(isdigit(c)){n = n *10 + c -'0'; c= getchar();}
n = n * f;
}
int q[MAXN], f[MAXN], c[MAXN], s, t, n, m;
inline int Y(int j,int k)
{
return f[j]+c[j]*c[j]-(f[k]+c[k]*c[k]);
}
inline int X(int j,int k)
{
return 2*(c[j]-c[k]);
}
int main()
{
while(~scanf("%d%d", &n,&m))
{
for(int i = 1; i <= n; i++)
{
GET(c[i]);
c[i] += c[i-1];
}
s = 1, t = 0;
q[++t] = 0;
for(int i = 1; i <= n; i++)
{
while(s < t && Y(q[s+1], q[s]) <= c[i] * X(q[s+1], q[s])) ++ s;
f[i] = f[q[s]] + m + (c[i] - c[q[s]])*(c[i] - c[q[s]]);
while(s < t && X(q[t-1], q[t]) * Y(q[t], i) <= X(q[t], i) * Y(q[t-1], q[t])) -- t;
q[++t] = i;
}
printf("%d\n", f[n]);
}
return 0;
}
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] ...
- hdu 3507 Print Article(斜率优化DP)
题目链接:hdu 3507 Print Article 题意: 每个字有一个值,现在让你分成k段打印,每段打印需要消耗的值用那个公式计算,现在让你求最小值 题解: 设dp[i]表示前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 ...
- hdu3507Print Article(斜率优化dp)
Print Article Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)To ...
- HDU-3507Print Article 斜率优化DP
学习:https://blog.csdn.net/bill_yang_2016/article/details/54667902 HDU-3507 题意:有若干个单词,每个单词有一个费用,连续的单词组 ...
随机推荐
- 初入WebService
搭建webservice需要用到的jar applicationContext.xml配置文件 <?xml version="1.0" encoding="UTF- ...
- NHibernate 慎用Session.Merge
Session.Merge其意思有两个步骤, 一般用法: Session.Merge(obj); 1. 从当前的Session中获取obj对象, 如果未获取到则从数据库获取. 2. 把程序中的obj的 ...
- VS2015企业版序列号
vs2015 企业版HM6NR-QXX7C-DFW2Y-8B82K-WTYJV2XNFG-KFHR8-QV3CP-3W6HT-683CH
- [array] leetCode-4-Median of Two Sorted Arrays-Hard
leetCode-4-Median of Two Sorted Arrays-Hard descrition There are two sorted arrays nums1 and nums2 o ...
- 从零开始搭建Vue组件库——VV-UI
前言: 前端组件化是当今热议的话题之一,也是我们在开发单页应用经常会碰到的一个问题,现在我们有了功能非常完善的Element-UI.各个大厂也相继宣布开源XXX-UI.但是也会存在一些问题,比如每个公 ...
- 零基础如何迅速学习HTML5?新手小白学习web前端H5自白!
很多的人在毕业之后才发现原来学的专业不是自己想做的工作,或者专业对口的工作待遇让人觉得并不满意,于是很多人选择培训机构学新的一门技能转换行业.IT行业的web前端H5受到很多学员的青睐.那么学习web ...
- R语言高性能编程(三)
一.使用并行计算加倍提升性能1.数据并行 VS 任务并行实现数据并行的算法scoket 并行性注意并行计算时间并不与执行任务的计算资源数目成正比(计算机核心),amdahl定律:并行代码的速度受限于串 ...
- UNIX标准及实现
UNIX标准及实现 引言 在UNIX编程环境和C程序设计语言的标准化方面已经做了很多工作.虽然UNIX应用程序在不同的UNIX操作系统版本之间进行移植相当容易,但是20世纪80年代UNIX版本 ...
- Vim配置及使用笔记
Vim配置及使用笔记 安装 apt-get install vim -y 配置说明 vim /etc/vim/vimrc 在配置文件后加入这些配置项 set nu set tabstop=4 set ...
- C#版本websocket及时通信协议实现
1:Websocket有java.nodejs.python.PHP.等版本 ,我现在使用的是C3版本,服务器端是Fleck.客户端和服务器端来使用websocket的,下面开始讲解如何使用: 2:在 ...