题目大意:

典题

数学分析 G(a,b)<sum[i]时 a优于b

G(a,b)<G(b,c)<sum[i]时 b必不为最优

#include <bits/stdc++.h>
#define N 500005
using namespace std;
int n,m,dp[N],deq[N],sum[N];
// deq[]为单调队列 sum[]为数组的前缀和
int DP(int i,int j) {
return dp[j]+m+(sum[i]-sum[j])*(sum[i]-sum[j]);
}
int UP(int j,int k) { //yj-yk的部分
return dp[j]+sum[j]*sum[j]-(dp[k]+sum[k]*sum[k]);
}
int DOWN(int j,int k) {//xj-xk的部分
return *(sum[j]-sum[k]);
}
/*
由分析 当0<a<b<i时
若(ya-yb)/(xa-xb)<sum[i]
此处表达为G(a,b)<sum[i] 则j优于k 若存在a,b和b,c满足上述要求
即存在G(a,b)<sum[i] G(b,c)<sum[i]
若G(a,b)<G(b,c) 则b肯定不为最优点
*/
int main()
{
while(~scanf("%d%d",&n,&m)) {
sum[]=dp[]=;
for(int i=;i<=n;i++) {
int num; scanf("%d",&num);
sum[i]=sum[i-]+num;
}
int head=, tail=;
deq[tail++]=;
for(int i=;i<=n;i++) {
while(head+<tail && UP(deq[head+],deq[head])<=sum[i]
*DOWN(deq[head+],deq[head]))
head++; /// G(head+1,head)<=sum[i] 即head+1优于head 则去掉head
dp[i]=DP(i,deq[head]); // 用此时的最优head更新dp[i]
while(head+<tail && UP(i,deq[tail-])*DOWN(deq[tail-],deq[tail-])
<=DOWN(i,deq[tail-])*UP(deq[tail-],deq[tail-]))
tail--;
/// 如果此时G(i,tail-1)<=G(tail-1,tail-2)<=sum[i] 则说明tail-1对应点为可删去
deq[tail++]=i;
}
printf("%d\n",dp[n]);
}
return ;
}
/*
纠结了一下维护单调队列时为什么判断条件是<=
第一处 G(head+1,head)=sum[i] 说明 两者平等 不存在谁更优这个问题
而仍然 head++; 是因为既然两者平等 那么只要留一个就可以了
第二处 G(i,tail-1)=G(tail-1,tail-2) 说明 两者斜率相等
即 i,tail-1,tail-2 三个对应点在同一条直线上
那么 tail-1 这个点可以直接忽略 所以继续 tail--;
*/

Print Article /// 斜率优化DP oj26302的更多相关文章

  1. HDU3507 Print Article(斜率优化dp)

    前几天做多校,知道了这世界上存在dp的优化这样的说法,了解了四边形优化dp,所以今天顺带做一道典型的斜率优化,在百度打斜率优化dp,首先弹出来的就是下面这个网址:http://www.cnblogs. ...

  2. hdu 3507 Print Article(斜率优化DP)

    题目链接:hdu 3507 Print Article 题意: 每个字有一个值,现在让你分成k段打印,每段打印需要消耗的值用那个公式计算,现在让你求最小值 题解: 设dp[i]表示前i个字符需要消耗的 ...

  3. hdu3507 Print Article[斜率优化dp入门题]

    Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...

  4. HDU3507 Print Article —— 斜率优化DP

    题目链接:https://vjudge.net/problem/HDU-3507 Print Article Time Limit: 9000/3000 MS (Java/Others)    Mem ...

  5. [hdu3507 Print Article]斜率优化dp入门

    题意:需要打印n个正整数,1个数要么单独打印要么和前面一个数一起打印,1次打印1组数的代价为这组数的和的平方加上常数M.求最小代价. 思路:如果令dp[i]为打印前i个数的最小代价,那么有 dp[i] ...

  6. HDU3507 Print Article (斜率优化DP基础复习)

    pid=3507">传送门 大意:打印一篇文章,连续打印一堆字的花费是这一堆的和的平方加上一个常数M. 首先我们写出状态转移方程 :f[i]=f[j]+(sum[i]−sum[j])2 ...

  7. 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 ...

  8. hdu3507Print Article(斜率优化dp)

    Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...

  9. HDU-3507Print Article 斜率优化DP

    学习:https://blog.csdn.net/bill_yang_2016/article/details/54667902 HDU-3507 题意:有若干个单词,每个单词有一个费用,连续的单词组 ...

随机推荐

  1. Redis缓存数据库常见操作

    Jedis的最为常见的操作.主要包括常用的列表(list).集合(set).有序集合(sorted set).哈希表(hash)等数据结构,以及其他特性支持. 参考资料:http://hello-ni ...

  2. php面向对象深入理解(二)

    一个简单的小程序:   配置 config.ini <?php //项目的根目录 define("ROOT","F:/文件夹的名字/oop/"); //数 ...

  3. (getElementBy**)与 querySelector(querySelectorAll) 的区别

    1. 通过类似于 document.getElementByTagName('div') 这种方式获取到的类数组,无法通过 forEach 进行遍历(可以通过for循环):而通过document.qu ...

  4. 【历年真题】斐波那契数列logn做法

    描述 [题解] 用矩阵乘法加速递推 [0 1] [1 1] [f[n-1]] [f[n-2]] = [f[n-1]] [f[n]] 求A矩阵的n-2次幂然后再乘B矩阵. 结果矩阵中的第二行第一列就是f ...

  5. flume的安装和使用

    1.下载 [linyouyi@hadoop01 software]$ wget https://mirrors.aliyun.com/apache/flume/1.9.0/apache-flume-1 ...

  6. iOS13适配/黑暗模式的适配/KVC访问私有属性/模态弹窗ViewController 默认样式改变 /LaunchImage即将废弃/蓝牙的权限申请/推送Device Token适配/UIKit 控件变化/StatusBar新增样式

    目录 1. KVC访问私有属性 2. 模态弹窗ViewController 默认样式改变 3. 黑暗模式的适配 4. LaunchImage即将废弃 5. 新增一直使用蓝牙的权限申请 6. Sign ...

  7. 案例 查询QC(query_cache)

    案例: 数据库版本 5.7.23 16c 64g 按月分区表,做压力测试 开启QC之前: select * from a where aa=xxx; QPS:每秒处理查询的数量 3000+ 开启之后 ...

  8. sql 递归显示所有父节点

    1.我先建两个表 一个表示项目及级别 另一个表示项目最后一级中包含内容.两个表的数据如图 CREATE TABLE [dbo].[yq_Project]( ,) primary key, ) NOT ...

  9. sklearn参数优化

    学习器模型中一般有两个参数:一类参数可以从数据中学习估计得到,还有一类参数无法从数据中估计,只能靠人的经验进行指定,后一类参数就叫超参数 比如,支持向量机里的C,Kernel,gama,朴素贝叶斯里的 ...

  10. 使用CSS为图片添加更多趣味的5种方法

    使用Photoshop为每个图片添加某种样式虽然可行,但会是相当乏味且困难的长久工作.下面要介绍的CSS技巧将帮助你从痛苦中解脱出来! 阴影效果 通过使用带有一些padding之的背景图来添加阴影效果 ...