洛谷3195(HNOI2008)玩具装箱
题目:https://www.luogu.org/problemnew/show/P3195
自己做斜率优化的第一道题。
推成斜率优化的样子很重要。
斜率优化的样子就是从 j 中求 i 的话,关系式里一个量只和 i 有关,一个量只和 j 有关,一个量同时和 i 与 j 有关。
这时可以把那个 同时和 i 与 j 有关的量 里的和 j 有关的量看成 x[ j ],把只和 j 有关的量看成 y[ j ],然后只和 i 有关的量就是截距、x[ j ]前面的就是式子里的斜率。
(为了推出这样的式子,可以设a,b等等,帮助自己推。大体思路是将与 i 或 j 或 i 和 j 有关的东西看成一个整体)
推出式子以后,找合适的 j 就是 j - 1 与 j 的斜率比式子里的斜率大(或小),而 j 与 j + 1 的斜率比式子里的斜率小(或大)的那个 j 。
找到 j 以后把式子变变形就得到推出dp[ i ] 的式子了。
可用单调队列。
把a什么的写成函数很方便。
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define db double
using namespace std;
const int N=;
int n,L,h=,t=,q[N];
ll s[N],dp[N];
db a(int i){return s[i]+i;}
db b(int i){return s[i]+i+L+;}
db x(int i){return b(i);}
db y(int i){return b(i)*b(i)+dp[i];}
db slope(int j,int i){return (y(i)-y(j))/(x(i)-x(j));}
int main()
{
scanf("%d%d",&n,&L);ll z;
for(int i=;i<=n;i++)
{
scanf("%lld",&z);s[i]=s[i-]+z;
}
for(int i=;i<=n;i++)
{
while(h<t&&slope(q[h],q[h+])<*a(i))h++;
dp[i]=(a(i)-b(q[h]))*(a(i)-b(q[h]))+dp[q[h]];
while(t>h&&slope(q[t-],q[t])>slope(q[t-],i))t--;
q[++t]=i;
}
printf("%lld",dp[n]);
return ;
}
洛谷3195(HNOI2008)玩具装箱的更多相关文章
- 洛谷3195 [HNOI2008]玩具装箱TOY(斜率优化+dp)
qwq斜率优化好题 第一步还是考虑最朴素的\(dp\) \[dp=dp[j]+(i-j-1+sum[i]-sum[j])^2 \] 设\(f[i]=sum[i]+i\) 那么考虑将上述柿子变成$$dp ...
- 斜率优化dp学习笔记 洛谷P3915[HNOI2008]玩具装箱toy
本文为原创??? 作者写这篇文章的时候刚刚初一毕业…… 如有错误请各位大佬指正 从例题入手 洛谷P3915[HNOI2008]玩具装箱toy Step0:读题 Q:暴力? 如果您学习过dp 不难推出d ...
- 洛谷 P3195 [HNOI2008] 玩具装箱
链接: P3195 题意: 给出 \(n\) 个物品及其权值 \(c\),连续的物品可以放进一个容器,如果将 \(i\sim j\) 的物品放进一个容器,产生的费用是 \(\left(j-i+\sum ...
- 洛谷P3195 [HNOI2008] 玩具装箱 [DP,斜率优化,单调队列优化]
题目传送门 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- [洛谷P3195][HNOI2008]玩具装箱TOY
题目大意:有n个物体,大小为$c_i$.把第i个到第j个放到一起,容器的长度为$x=j-i+\sum\limits_{k-i}^{j} c_k$,若长度为x,费用为$(x-L)^2$.费用最小. 题解 ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP
题目:https://www.luogu.org/problemnew/show/P3195 第一次用斜率优化...其实还是有点云里雾里的: 网上的题解都很详细,我的理解就是通过把式子变形,假定一个最 ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY 斜率优化
Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 100000 ...
- 洛谷 P3195 [HNOI2008]玩具装箱TOY
题意简述 有n个物体,第i个长度为ci 将n个物体分为若干组,每组必须连续 如果把i到j的物品分到一组,则该组长度为 \( j - i + \sum\limits_{k = i}^{j}ck \) 求 ...
随机推荐
- IOS-UISearchBar
UISearchBar控件 最近用到搜索功能.于是,经过不断的研究,终于,有点懂了. 那就来总结一下吧,好记性不如烂笔头! 搜索,无疑可以使用UISearchBar控件! 那就先了解一下UISea ...
- Prism 4 文档 ---第7章 组成用户界面
一个应用程序的用户界面(UI)可以通用以下几种模式之一来构建: 窗体所需要所有的控件都包含在一个单独的XAML文件中,在设计时组合这个窗体. 窗体的逻辑区域被分割到单独的部分中,通常指哟过户控件.这些 ...
- RabbitMQ(3) Java客户端使用
RabbitMQ针对不同的开发语言(java,python,c/++,Go等等),提供了丰富对客户端,方便使用.就Java而言,可供使用的客户端有RabbitMQ Java client. Rabbi ...
- LeetCode OJ:Search in Rotated Sorted Array II(翻转排序数组的查找)
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- sed用法详解
转载自: SED单行脚本快速参考(Unix 流编辑器) 如侵犯您的版权,请联系:Windeal12@qq.com ------------------------------------------- ...
- 数据仓库(Data Warehouse)建设
数据仓库初体验 数据库仓库架构以前弄的很简单:将各种源的数据统一汇聚到DW中,DW没有设计,只是将所有数据汇聚起来: ETL也很简单,只是将数据同步到DW中,只是遇到BUG时,处理一些错误数据,例如: ...
- DIV css中cursor属性详解-鼠标移到图片变换鼠标形状 (转)
css中cursor属性详解-鼠标移到图片变换鼠标形状 语法: cursor : auto | all-scroll | col-resize| crosshair | default | han ...
- c++下使用邮槽实现进程间通信
Windows API提供了邮槽和命名管道两种机制来实现进程间通信,在这里使用C++实现邮槽. 邮槽是Windows提供的一种进程间单向通信的机制,进程中的一方只能读取(或写入)数据,而另一方只能写入 ...
- 基于tensorflow的增强学习
可以通过下面的连接查看这个项目工程: https://github.com/reinforceio/tensorforce 通过这遍文章来了这个项目的使用: https://reinforce.io/ ...
- HDU 1374
http://acm.hdu.edu.cn/showproblem.php?pid=1374 已知三点坐标,求三点确定的圆的周长 #include <iostream> #include ...