题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3507

题目大意:给你n个数,然后问你怎么分割当前的这n个数位那几组,使得每一组的权值加起来最大。每一组权值的计算方法在题目上说了。

具体思路: 一开始打了一波两重for循环的,一直求一个tile,但是wa了。然后就学了斜率优化的方法

https://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html

就是把表达式转换成斜率类型的表达式,然后对于当前的节点,通过判断斜率的方式来决定当前的点是不是该选择,这个过程可以用单调队列维护。

AC代码:

 #include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
# define ll long long
const int maxn = 6e5+;
int sum[maxn];
int q[maxn];
int dp[maxn];
int n,m;
int getdp(int i,int j){
return dp[i]+m+(sum[j]-sum[i])*(sum[j]-sum[i]);
}
int getup(int i,int j){
return dp[i]+sum[i]*sum[i]-(dp[j]+sum[j]*sum[j]);
}
int getdown(int i,int j){
return *(sum[i]-sum[j]);
}
int main(){
while(~scanf("%d %d",&n,&m)){
for(int i=;i<=n;i++){
scanf("%d",&sum[i]);
sum[i]+=sum[i-];
}
int tail,head;
tail=head=;
q[tail++]=; for(int i=;i<=n;i++){
while(head+<tail&&getup(q[head+],q[head])<=sum[i]*getdown(q[head+],q[head]))head++;
dp[i]=getdp(q[head],i);
while(head+<tail&&getdown(q[tail-],q[tail-])*getup(q[tail-],i)<=getdown(q[tail-],i)*getup(q[tail-],q[tail-]))tail--;
q[tail++]=i;
}
printf("%d\n",dp[n]);
}
return ;
}

Print Article(斜率DP入门+单调队列)的更多相关文章

  1. hdu3507 Print Article(斜率DP优化)

    Zero has an old printer that doesn't work well sometimes. As it is antique, he still like to use it ...

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

  3. 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...

  4. NYOJ-258/POJ-2559/HDU-1506 Largest Rectangle in a Histogram,最大长方形,dp或者单调队列!

                                         Largest Rectangle in a Histogram 这么经典的题硬是等今天碰到了原题现场懵逼两小时才会去补题.. ...

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

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

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

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

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

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

  8. HDU 3507 Print Article(DP+斜率优化)

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

  9. POJ 1180 斜率优化DP(单调队列)

    Batch Scheduling Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4347   Accepted: 1992 ...

随机推荐

  1. Jquery Mobile表单

    三个前提: 1.每个form必须设置method和action属性 2.每个form必须有页面范围内唯一的id标识 3.每个form必须有一个label标签,通过设置它的for属性来匹配元素的id & ...

  2. java linux sdk1.8

    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-co ...

  3. wz

    chcp 437 monkeyrunner wz.py wz.bat #coding=utf-8 from com.android.monkeyrunner import MonkeyDevice,M ...

  4. Django REST Framework限速

    官方文档:http://www.django-rest-framework.org/api-guide/throttling/#throttling settings.py配置 REST_FRAMEW ...

  5. SQL语法基础之INSEART语句

    SQL语法基础之INSEART语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看帮助信息 1>.查看INSERT方法的帮助信息 mysql> ? INSERT ...

  6. MyBatis-Cache

    一.一级缓存 /** * 一级缓存(本地缓存):SqlSession 级别.一级缓存是默认开启的,为 SqlSession 级别的一个Map * 与数据库同一次会话期间查询到的数据会放在本地缓存中,以 ...

  7. python jquery初识

     jQuery的介绍 jQuery是一个快速,小巧,功能丰富的JavaScript库.它通过易于使用的API在大量浏览器中运行,使得HTML文档遍历和操作, 事件处理动画和Ajax更加简单.通过多功能 ...

  8. Linux记录-linux系统监控命令汇总

    命令 功能应用 用法举例     free 查看内存使用情况,包括物理内存和虚拟内存 free -h或free -m     vmstat 对系统的整体情况进行统计,包括内核进程.虚拟内存.磁盘.陷阱 ...

  9. log 的 debug()、 error()、 info()方法

    log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF.FATAL.ERROR.WARN.INFO.DEBUG.TRACE. ALL. 简单的说,就是 ...

  10. vue input添加回车触发

    普通vue input @keyup.enter="onSubmit" element el-input @keyup.enter.native="onSubmit&qu ...