【决策单调性】玩具装箱(金牌导航 决策单调性优化DP-1)
玩具装箱
金牌导航 决策单调性优化DP-1
题目大意
给出若干个物品,把iii到jjj个物品装在一起的长度l=j−i+∑k=ijakl=j-i+\sum_{k=i}^{j}a_kl=j−i+∑k=ijak(物品必须是连续的),其代价为(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)相关推荐
- 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- HYSBZ 1010 玩具装箱toy (决策单调DP)
题意: 有n个玩具,要将它们分为若干组,玩具长度C可能不同.给出n个玩具的摆放顺序,连续的任意多个玩具都可以成为一组.区间[i,j]成为一组的费用是cost=(j-i+Sigma(Ck)-L)2且i& ...
- 算法学习——决策单调性优化DP
update in 2019.1.21 优化了一下文中年代久远的代码 的格式-- 什么是决策单调性? 在满足决策单调性的情况下,通常决策点会形如1111112222224444445555588888 ...
- 【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] ...
- CF834D. The Bakery(线段树优化dp 决策单调性优化dp)
linkkkkk 题意: 将一个长度为 n 的序列分为 m段,使得总价值最大. 一段区间的价值表示为区间内不同数字的个数. n≤35000,m≤50 思路: 考虑朴素的dpdpdp方程:dp[i][j ...
- [HNOI2008]玩具装箱(1D/1D动态规划)
[HNOI2008]玩具装箱 题目描述 P 教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中. P ...
- 『玩具装箱TOY 斜率优化DP』
玩具装箱TOY(HNOI2008) Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊 ...
- 【斜率优化】玩具装箱(luogu 3195)
玩具装箱 luogu 3195 题目大意 有n件物品,每件物品有相对的长度CiC_iCi现在要把这n件物品放到容器中,切放的物品必须是连续的,若把第i件物品到第j件物品放到一个容器中,那此容器的长度 ...
- bzoj 1010: [HNOI2008]玩具装箱toy(斜率dp)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MB Submit: 10837 Solved: 4513 [Submit] ...
最新文章
- 轻量目录访问协议 工具 openldap 简介
- Fragment官方解析
- 同类分析比较工具 google trend
- entry for sde instance not found in services file解决方法[转]
- APP开发者到期续费说明
- 收购一家毁一家,雅虎到底杀死了多少好产品?
- Kubernetes 常见运维技巧总结
- 移动设备响应式网站之CSS媒体查询
- 《linux内核完全注释》读书笔记 2
- “软件工程造价师”和“软件造价评估师”有什么区别?
- FastDFS原理及维护
- fw325r没有虚拟服务器,迅捷fw325r路由器设置完没有网怎么办?
- 新xp系统无法连接网络连接服务器,WinXP系统本地连接受限制或无连接怎么办?...
- c++小游戏 走迷宫
- 国产CSM32RV20是基于RISC-V核的低功耗MCU芯片
- 最全的百度网盘搜索引擎
- jquery实现左右点击滑动
- Ubuntu下卸载和重新安装wps ——解决wps不能带格式复制粘贴网页文字和图片问题
- 瀑布模型,冯.诺依曼结构——摘自百科
- shiro用redis实现缓存机制
热门文章
- egg前面加什么_国威说阀:阀门前面为什么加国标美标日标之类的?
- python 正则匹配 条件太多怎么办_Python条件正则表达式
- harmonyos con,鸿蒙HarmonyOS系统中的JS开发框架
- linux脚本传参修改配置文件,shell脚本修改配置文件指定行的值
- accdb原有的数据怎么清除_VBA中利用数组对数据批量处理的方法
- 将k个有序链表合并成一个有序链表
- 2018年蓝桥杯B组题E题+快排
- oracle导出BOM文件,ORACLE ERP导数据(BOM清单)-备份恢复-Oracle频道-中国IT实验室
- 数据结构与算法--二叉树的深度问题
- Redis高效性探索--管道