题意:给出一个数列C,一个数字M,将数列分成若干段,每段的代价为(设这段的数字为k个):

dp[i]=min(dp[j]+(sum[i]-sum[j])*(sum[i]-sum[j])+M)

若j1<j2且j2比j1优

dp[j1]+sum[i]^2+sum[j1]^2-2*sum[i]*sum[j1]+M>dp[j2]+sum[i]^2+sum[j2]^2-2*sum[i]*sum[j2]

dp[j1]-dp[j2]+sum[j1]^2-sum[j2]^2>2*sum[i]*(sum[j1]-sum[j2])

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
int dp[],sum[],n,m,q[];
int getup(int j,int k){
return dp[j]+sum[j]*sum[j]-dp[k]-sum[k]*sum[k];
}
int getdown(int x,int y){
return *(sum[x]-sum[y]);
}
int getdp(int i,int j){
return dp[j]+m+(sum[i]-sum[j])*(sum[i]-sum[j]);
}
int main(){
while (scanf("%d%d",&n,&m)==){
for (int i=;i<=n;i++){
scanf("%d",&sum[i]);
}
dp[]=sum[]=;
for (int i=;i<=n;i++)
sum[i]+=sum[i-];
int h=,t=;
q[t++]=;
for (int i=;i<=n;i++){
while (h+<t&&getup(q[h+],q[h])<=sum[i]*getdown(q[h+],q[h])) h++;
dp[i]=getdp(i,q[h]);
while (h+<t&&getup(i,q[t-])*getdown(q[t-],q[t-])<=getup(q[t-],q[t-])*getdown(i,q[t-])) t--;
q[t++]=i;
}
printf("%d\n",dp[n]);}
return ;
}

HDU 3507 PrintArticle (单调队列优化)的更多相关文章

  1. HDU 3401 Trade(单调队列优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3401 题意:炒股.第i天买入一股的价钱api,卖出一股的价钱bpi,最多买入asi股,最多卖出bsi股 ...

  2. 【单调队列优化dp】HDU 3401 Trade

    http://acm.hdu.edu.cn/showproblem.php?pid=3401 [题意] 知道之后n天的股票买卖价格(api,bpi),以及每天股票买卖数量上限(asi,bsi),问他最 ...

  3. bzoj1855: [Scoi2010]股票交易 单调队列优化dp ||HDU 3401

    这道题就是典型的单调队列优化dp了 很明显状态转移的方式有三种 1.前一天不买不卖: dp[i][j]=max(dp[i-1][j],dp[i][j]) 2.前i-W-1天买进一些股: dp[i][j ...

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

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

  5. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

  6. 单调队列优化DP,多重背包

    单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...

  7. Parade(单调队列优化dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others)    ...

  8. 单调队列优化DP——习题收集

    前言 感觉可以用单调队列优化dp的模型还是挺活的,开个随笔记录一些遇到的比较有代表性的模型,断续更新.主要做一个收集整理总结工作. 记录 0x01 POJ - 1821 Fence,比较适合入门的题, ...

  9. bzoj1855: [Scoi2010]股票交易--单调队列优化DP

    单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...

随机推荐

  1. Codeforces 533B Work Group

    http://codeforces.com/problemset/problem/533/B 题目大意: 每个人有一个直接的领导,1是总裁,现在要找一个最大的集合,每个领导领导的人的数量都是偶数,问最 ...

  2. android Handler及消息处理机制的简单介绍

    学习android线程时,直接在UI线程中使用子线程来更新TextView显示的内容,会有如下错误:android.view.ViewRoot$CalledFromWrongThreadExcepti ...

  3. BHO多线程中实现右键菜单

    在BHO中实现右键菜单网上相关文章很多,可以通过实现IDocHostUIHandler接口的ShowContextMenu.截获HTMLDocumentEvents2的OnContextMenu消息等 ...

  4. java 内存区域中的栈

    有人说栈区存放引用,这种说法并不准确. public void Method1() { int i = 4; int y = 2; class1 cls1 = new class1(); } java ...

  5. cocos2dx-lua绑定自定义c++类(二)

    在 cocos2dx-lua绑定自定义c++类(一)中介绍了如何产生绑定文件. 现在,来看看怎么在工程里使用这个cpp文件.像普通源码文件一样,导入到工程里,看到 LuaTest.h文件里有一个函数入 ...

  6. Java 微服务框架 Redkale 入门介绍

    Redkale 功能 Redkale虽然只有1.xM大小,但是麻雀虽小五脏俱全.既可作为服务器使用,也可当工具包使用.作为独立的工具包提供以下功能:1.convert包提供JSON的序列化和反序列化功 ...

  7. C# - 使用ConfigurationManager保存数据到App.config

    1. ConfigurationManager的命名空间:using System.Configuration; 2. To be able to save you have to use a con ...

  8. Linux中输入命令按tab提示后会自动转义解决方案(xjl456852原创)

    linux在命令行输入命令时,如果有$字符,按tab键时会自动在前面加入转义字符,反而达不到自己需要的效果. 例如: 在Centos7下,我要进入一个环境变量,并编辑一个文件: 比如我要进入$JAVA ...

  9. 斐波那契数列 Php练手

    数列从第三项开始,每一项都等于前两项之和. F0=0,F1=1,Fn=F(n-1)+F(n-2) 递归版和非递归版. <?php function fib($n){ $array = array ...

  10. (LeetCode)两个队列来实现一个栈

    原题例如以下: Implement the following operations of a stack using queues. push(x) -- Push element x onto s ...