玩具装箱

金牌导航 决策单调性优化DP-1

题目大意

给出若干个物品,把iii到jjj个物品装在一起的长度l=j−i+∑k=ijakl=j-i+\sum_{k=i}^{j}a_kl=j−i+∑k=ij​ak​(物品必须是连续的),其代价为(l+L)2(l + L)^2(l+L)2(L为给出的常数),问把所有物品装起来的最小代价

输入样例

5 4
3
4
2
1
4

输出样例

1

样例解释

按3,4,21,4分配
代价为1+0+0+0=1

数据范围

1⩽N⩽5×104,1⩽L,ai⩽1071\leqslant N \leqslant 5\times 10^4,1\leqslant L,a_i\leqslant 10^71⩽N⩽5×104,1⩽L,ai​⩽107

解题思路

设f_i为前i个物品装完的最小代价
那么有
fi=minj=1i−1(fj+(l−L)2)f_i=min_{j=1}^{i-1}(f_j + (l-L)^2)fi​=minj=1i−1​(fj​+(l−L)2)
把代入四边形不等式,然后暴力拆开,可以证明其满足决策单调性
然后代入决策单调性的模板即可

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 50010
using namespace std;
ll n, L, l, r, mid, top, a[N], f[N], d[N], lt[N];
ll g(ll x, ll y)
{return f[x] + (y - x - 1 + a[y] - a[x] - L) * (y - x - 1 + a[y] - a[x] - L);
}
ll find(ll x)
{ll l = 1, r = top;while(l < r){ll mid = (l + r + 1) >> 1;if (x < lt[mid]) r = mid - 1;else l = mid;}return d[l];
}
int main()
{scanf("%lld%lld", &n, &L);for (ll i = 1; i <= n; ++i){scanf("%lld", &a[i]);a[i] += a[i - 1]; }lt[++top] = 1;d[top] = 0;for (ll i = 1; i <= n; ++i){f[i] = g(find(i), i);while(top && g(i, lt[top]) < g(d[top], lt[top])) top--;l = lt[top];r = n;while (l < r){mid = (l + r) >> 1;if (g(i, mid) < g(d[top], mid)) r = mid;else l = mid + 1;}if (g(i, l) > g(d[top], l)) continue;d[++top] = i;lt[top] = l;}printf("%lld", f[n]);return 0;
}

注:本题可以用斜率优化进行计算,但这里不进行讲解

【决策单调性】玩具装箱(金牌导航 决策单调性优化DP-1)相关推荐

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

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

  2. HYSBZ 1010 玩具装箱toy (决策单调DP)

    题意: 有n个玩具,要将它们分为若干组,玩具长度C可能不同.给出n个玩具的摆放顺序,连续的任意多个玩具都可以成为一组.区间[i,j]成为一组的费用是cost=(j-i+Sigma(Ck)-L)2且i& ...

  3. 算法学习——决策单调性优化DP

    update in 2019.1.21 优化了一下文中年代久远的代码 的格式-- 什么是决策单调性? 在满足决策单调性的情况下,通常决策点会形如1111112222224444445555588888 ...

  4. 【CF868F】Yet Another Minimization Problem (决策单调性优化dp+分治)

    description 点击查看题目 solution code 设dpi,jdp_{i,j}dpi,j​:把前iii个数划分jjj段的最小花费,wi,jw_{i,j}wi,j​:[i,j][i,j] ...

  5. CF834D. The Bakery(线段树优化dp 决策单调性优化dp)

    linkkkkk 题意: 将一个长度为 n 的序列分为 m段,使得总价值最大. 一段区间的价值表示为区间内不同数字的个数. n≤35000,m≤50 思路: 考虑朴素的dpdpdp方程:dp[i][j ...

  6. [HNOI2008]玩具装箱(1D/1D动态规划)

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

  7. 『玩具装箱TOY 斜率优化DP』

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

  8. 【斜率优化】玩具装箱(luogu 3195)

    玩具装箱 luogu 3195 题目大意 有n件物品,每件物品有相对的长度CiC_iCi​现在要把这n件物品放到容器中,切放的物品必须是连续的,若把第i件物品到第j件物品放到一个容器中,那此容器的长度 ...

  9. bzoj 1010: [HNOI2008]玩具装箱toy(斜率dp)

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 10837  Solved: 4513 [Submit] ...

最新文章

  1. 轻量目录访问协议 工具 openldap 简介
  2. Fragment官方解析
  3. 同类分析比较工具 google trend
  4. entry for sde instance not found in services file解决方法[转]
  5. APP开发者到期续费说明
  6. 收购一家毁一家,雅虎到底杀死了多少好产品?
  7. Kubernetes 常见运维技巧总结
  8. 移动设备响应式网站之CSS媒体查询
  9. 《linux内核完全注释》读书笔记 2
  10. “软件工程造价师”和“软件造价评估师”有什么区别?
  11. FastDFS原理及维护
  12. fw325r没有虚拟服务器,迅捷fw325r路由器设置完没有网怎么办?
  13. 新xp系统无法连接网络连接服务器,WinXP系统本地连接受限制或无连接怎么办?...
  14. c++小游戏 走迷宫
  15. 国产CSM32RV20是基于RISC-V核的低功耗MCU芯片
  16. 最全的百度网盘搜索引擎
  17. jquery实现左右点击滑动
  18. Ubuntu下卸载和重新安装wps ——解决wps不能带格式复制粘贴网页文字和图片问题
  19. 瀑布模型,冯.诺依曼结构——摘自百科
  20. shiro用redis实现缓存机制

热门文章

  1. egg前面加什么_国威说阀:阀门前面为什么加国标美标日标之类的?
  2. python 正则匹配 条件太多怎么办_Python条件正则表达式
  3. harmonyos con,鸿蒙HarmonyOS系统中的JS开发框架
  4. linux脚本传参修改配置文件,shell脚本修改配置文件指定行的值
  5. accdb原有的数据怎么清除_VBA中利用数组对数据批量处理的方法
  6. 将k个有序链表合并成一个有序链表
  7. 2018年蓝桥杯B组题E题+快排
  8. oracle导出BOM文件,ORACLE ERP导数据(BOM清单)-备份恢复-Oracle频道-中国IT实验室
  9. 数据结构与算法--二叉树的深度问题
  10. Redis高效性探索--管道