题意:

  给出一个序列 {a[i]} 把其分成若干个区间,每个区间的价值为 W = (j − i + ∑ak(i<=k<=j) - L)​,求所有分割方案中价值之和的最小值。

细节:

  仔细看数据范围:1 <= N <= 50000 ,1 <= C[i] <= 10^7,所以不忘记开Long Long / Int64,咳咳我很关心 Pascal 选手。

分析:

  显然一题划分区间求最值的题目,所以可以用动态规划解决,联想一下状态:f[i] 表示以 i 为结尾且以 i 为断点的最小价值和。

  考虑到 i 是断点的问题所以对于后面的状态,新的一段区间是不包括 i 的,所以我们可以开始转移了:f[i] = min { f[j] + (sum[i] - sum[j] + i - (j + 1) - L)2 }

  得到了一个 1D/1D 的动规方程,对于这一类式子我们一般考虑优化转移,显然状态无法进行优化,不然思想转变成了贪心,显然局部最有不满足全局最有,我们可以尝试是否存在在转移时的无用状态,所谓无用状态是一些不优的状态,我们显然可以选择最有的状态进行转移,其满足最有字结构的性质。

  不妨令 j1 < j2 < i,且 j1 的转移不必 j2 优,从中我们可以发现不需要去求解 j1 直接从 j2 进行转移不会影响答案,且能够节省时间。

  所以我们可以得到式子 f[j2] + (sum[i] - sum[j2] + i - (j2 + 1) - L)2 <= f[j1] + (sum[i] - sum[j1] + i - (j1 + 1) - L)2,由于式子过于复杂我们考虑换元。

  不妨再令 a[i] = sum[i] - L + i - 1,b[i] = sum[i] + i

  所以式子转换成:f[j2] + ( a[i] - b[j2] )<= f[j1] + ( a[i] - b[j1] )2

  最后可得:f[j2]+ b[j2]-f[j1]-b[j1]2 <= 2 × a[i] ×( b[j2] - b[j1] ) 所以此时我们可以考虑斜率优化具体的分析请详见一下本人博客

代码:

本人压行怪物请见谅:

#include<bits/stdc++.h>
#define MAXN 50010
#define LL long long
using namespace std; LL f[MAXN], sum[MAXN], a[MAXN], b[MAXN];
int n, L, que[MAXN]; int main(){
scanf("%d%d", &n, &L);
for (int i=; i<=n; i++){
LL x;
scanf("%lld", &x);
sum[i]=sum[i-]+x;
}
for (int i=; i<=n; i++) a[i]=sum[i]+i--L, b[i]=sum[i]+i;
int head=, tail=;
for (int i=; i<=n; i++){
while (head<tail && *a[i]*(b[que[head+]]-b[que[head]])>=f[que[head+]]-f[que[head]]+b[que[head+]]*b[que[head+]]-b[que[head]]*b[que[head]]) ++head;
f[i]=f[que[head]]+(a[i]-b[que[head]])*(a[i]-b[que[head]]);
while (head<tail && (f[que[tail]]+b[que[tail]]*b[que[tail]]-f[que[tail-]]-b[que[tail-]]*b[que[tail-]])*(b[i]-b[que[tail]])>=(f[i]+b[i]*b[i]-f[que[tail]]-b[que[tail]]*b[que[tail]])*(b[que[tail]]-b[que[tail-]])) --tail;
que[++tail]=i;
}
printf("%lld\n", f[n]);
return ;
}

Luogu3195 [HNOI2008]玩具装箱TOY (方程变形 + 斜率优化 )的更多相关文章

  1. bzoj1010: [HNOI2008]玩具装箱toy(DP+斜率优化)

    1010: [HNOI2008]玩具装箱toy 题目:传送门 题解: 很明显的一题动态规划... f[i]表示1~i的最小花费 那么方程也是显而易见的:f[i]=min(f[j]+(sum[i]-su ...

  2. BZOJ 1010: [HNOI2008]玩具装箱toy(DP+斜率优化)

    [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊 ...

  3. [HNOI2008]玩具装箱toy(dp+斜率优化)

    斜率优化问题一般都是决策单调问题.对于这题能够证明单调决策. 令sum[i]=sigma(c [k] ) 1<=k<=i  ,  f[i]=sum[i]+i ,  c=L+1; 首先我们能 ...

  4. 【BZOJ】1010: [HNOI2008]玩具装箱toy(dp+斜率优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1010 蛋疼用latex写了份题解.. 2015.03.07 upd:很多东西可能有问题,最好看下边提 ...

  5. [luogu3195 HNOI2008] 玩具装箱TOY (斜率优化dp)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  6. luogu3195 [HNOI2008]玩具装箱TOY

    懒得写 #include <iostream> #include <cstdio> using namespace std; typedef long long longliv ...

  7. 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  8. 斜率优化dp学习笔记 洛谷P3915[HNOI2008]玩具装箱toy

    本文为原创??? 作者写这篇文章的时候刚刚初一毕业…… 如有错误请各位大佬指正 从例题入手 洛谷P3915[HNOI2008]玩具装箱toy Step0:读题 Q:暴力? 如果您学习过dp 不难推出d ...

  9. Bzoj 1010: [HNOI2008]玩具装箱toy(斜率优化)

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MB Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定 ...

随机推荐

  1. python 多继承(新式类) 三

    深入super 一下内容引用自:http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html,写的挺好的. 代码段3 class ...

  2. FTP上传下载 C#辅助类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  3. 【转】微信小程序原理

    微信小程序原理 kamidox 关注 2016.11.05 09:42* 字数 2356 阅读 14621评论 5喜欢 75赞赏 1 微信小程序使用了前端技术栈 JavaScript/WXML/WXS ...

  4. Promise/A+规范

    1.什么是Promise? Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 2.对于几种常见异步编程方案 回调函数 事件监听 发布/ ...

  5. hihocoder1831 80 Days

    思路: 令p[i] = a[i] - b[i],p[i + n] = p[i](i = 1,2,...,n),则需要找出一段长度为n的连续序列使此序列的任一前缀和均大于-c.转化如下:首先求序列p的前 ...

  6. [BZOJ2982]combination Lucas定理

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2982 $C(N,M)\% P = C(N\% P,M\% P) * C(N/P,M/P)\ ...

  7. VUE学习,vue运行环境搭建遇见的小问题

    1.使用vscode来编辑项目,那么首先给它搭一个vue运行的环境,打开集成终端,使用npm install live-server -g安装live-server. problem1:cmd终端分行 ...

  8. java.lang.ClassCastException android.widget.RelativeLayout LayoutParams 异常

    1.在xml布局文件如下所示: <RelativeLayout android:layout_width="match_parent" android:layout_heig ...

  9. 目后佐道IT教育的品牌故事

    关于目后佐道 目后佐道IT教育作为中国IT职业教育领导品牌,致力于HTML5.UI.PHP.Java+大数据.Python+人工智能.Linux.产品经理.测试.运维等课程培训.100%全程面授,平均 ...

  10. CAD交互绘制批注(网页版)

    js中实现代码说明: 动态拖放时的绘制事件: function DynWorldDrawComment( pCustomEntity, pWorldDraw, curPt) { // 得到绘制参数. ...