BZOJ 1096: [ZJOI2007]仓库建设

news/2024/7/7 20:01:16

传送门

斜率优化DP入门题

显然如果在一个位置 i 建一个仓库,且上一个仓库位置为 j 那么从 j+1到 i 的物品显然都要存在 i 仓库是最优的

设 $f [ i ]$ 表示在第 i 个工厂建设仓库时,工厂 1 到 i 的物品都转移好的最小花费

考虑上一个仓库的位置 j

设工厂 i 离工厂 1 的距离为 $L[i]$

那么花费就是$L[i]\cdot \sum _{k=j+1}^{i}P[k]-\sum _{k=j+1}^{i}(L[k]\cdot P[k])$

那么方程就是 $f[i]=f[j]+L[i]\cdot (sumA[i]-sumA[j])-sumB[i]+sumB[j]+C[i]$

然后把式子拆开直接斜率优化

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
typedef long long ll;
inline int read()
{int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }return x*f;
}
const int N=1e6+7;
int n;
ll L[N],P[N],C[N];
ll sumA[N],sumB[N],f[N];
int Q[N],hea=1,las=1;
inline ll X(int x) { return sumA[x]; }
inline ll Y(int x) { return f[x]+sumB[x]; }
inline double slope(int x,int y) { return (double)((Y(x)-Y(y)))/(X(x)-X(y)); }
int main()
{n=read();for(int i=1;i<=n;i++){L[i]=read(),P[i]=read(),C[i]=read();sumA[i]=sumA[i-1]+P[i];sumB[i]=sumB[i-1]+P[i]*L[i];}for(int i=1;i<=n;i++){while(hea<las && slope(Q[hea],Q[hea+1])<L[i] ) hea++;int j=Q[hea];f[i]=f[j]+(sumA[i]-sumA[j])*L[i]-sumB[i]+sumB[j]+C[i];while(hea<las && slope(Q[las-1],i) < slope(Q[las-1],Q[las]) ) las--;Q[++las]=i;}printf("%lld",f[n]);return 0;
}

 

转载于:https://www.cnblogs.com/LLTYYC/p/10166776.html


http://lihuaxi.xjx100.cn/news/252654.html

相关文章

成为探路者,成就探路者!亚马逊云科技中国峰会精彩回顾

点击上方入口立即【自由构建 探索无限】一起共赴年度科技盛宴&#xff01;点击阅读原文进入官方小程序观看主题演讲精彩回放前沿技术&#xff0c;大咖云集更多精彩不容错过

【组队学习】【28期】数据采集从入门到精通

数据采集从入门到精通 论坛版块&#xff1a; http://datawhale.club/c/team-learning/38-category/38 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-program/tree/master/CollectData 学习目标 随着数字化的不断推进&#xff0c;数据采集在数据…

【MATLAB】矩阵运算之矩阵分解

矩阵分解&#xff1a;把一个矩阵分解成为矩阵连乘的形式。矩阵的分解函数cholCholesky分解cholinc稀疏矩阵的不完全Cholesky分解lu矩阵LU分解luinc稀疏矩阵的不完全LU分解qr正交三角分解svd奇异值分解gsvd一般奇异值分解schur舒尔分解 在MATLAB中线性方程组的求解主要基于四种基…

FreeBSD设备驱动管理介绍(BSP: Ti AM335x)

这段时间一直在忙FreeBSD驱动移植的项目&#xff0c;因此对FreeBSD做了一定的了解&#xff0c;鉴于网上对于FreeBSD的设备驱动资料较少&#xff0c;在这里给出本人对于FreeBSD驱动管理的理解心得&#xff08;主要是USB驱动管理&#xff09;&#xff0c;希望能对开源开发者有所帮…

2018年终总结

转眼间&#xff0c;2018年就要过去了&#xff0c;又可以来总结一年的得失了。 今年可以说是充满了收获与挑战的一年&#xff0c;一年的工作基本上是围绕着node来进行的&#xff0c;前端相关的东西是做的越来越少。 工作相关的 今年应该说是换工位频率非常高的一年&#xff0c;东…

基于HTML5的Google水下搜索

这次愚人节的时候&#xff0c;Google推出了水下搜索&#xff0c;当然&#xff0c;这只是一个愚人的小把戏&#xff0c;不过效果非常不错&#xff0c;进入页面后&#xff0c;第一眼是一个水面的效果&#xff0c;水下的鲨鱼在游来游去&#xff0c;然后Google logo和搜索框从水面上…

Play.ht训练出播客乔布斯/用嘴做视频?Meta出品/我国牵头发布首个自动驾驶测试场景领域国际标准...

本周&#xff0c;业界有哪些新鲜事&#xff1f;核心硬件Linux 6.1为LoongArch CPU带来新功能日前&#xff0c;Linux 6.1为LoongArch CPU带来新的附加功能。早在5.19版本中&#xff0c;Linux便实现对LoongArch CPU 的初步支持&#xff0c;此后开发人员坚持填补功能特性上的短板&…

【MATLAB】稀疏矩阵(含有大量0元素的矩阵)

1、稀疏矩阵的储存方式 对于稀疏矩阵&#xff0c;MATLAB仅储存矩阵所有非零元素的值及其位置&#xff08;行号和列号&#xff09;。 2、稀疏矩阵的生成 1&#xff09;利用sparse函数从满矩阵转换得到稀疏矩阵函数名称表示意义sparse(A)由非零元素和下标建立稀疏矩阵A。如果A已是…