【BZOJ3437】小P的牧场,斜率优化DP
传送门
写在前面:感觉线性基太蛋疼了
思路:
原始方程
f[i]=min(f[j]+∑ik=j+1b[k]∗(i−k)+a[i])j∈[0,i)f[i]=min(f[j]+∑^i_{k=j+1}b[k]*(i-k)+a[i]) j∈[0,i)
用前缀和优化
f[i]=min(f[j]+i∗(sum1[i]−sum1[j])−(sum2[i]−sum[j])+a[i])f[i]=min(f[j]+i*(sum1[i]-sum1[j])-(sum2[i]-sum[j])+a[i])
其中sum1[x]=∑xi=1b[i]sum1[x]=∑^x_{i=1}b[i],sum2[x]=∑xi=1b[i]∗isum2[x]=∑^x_{i=1}b[i]*i
复杂度O(n2)O(n^2)
设x>y且x转移i比y转移i优,则有
(f[x]+sum2[x]−f[y]−sum2[y])sum1[x]−sum1[y]<i\frac{(f[x]+sum2[x]-f[y]-sum2[y])}{sum1[x]-sum1[y]}
注意:数据范围不全,a,b也属于long long范围
代码:
#include<bits/stdc++.h>
#define LL long long
#define M 1000003
using namespace std;
LL in()
{LL t=0;char ch=getchar();while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9') t=(t<<3)+(t<<1)+ch-48,ch=getchar();return t;
}
int n,head=1,tail=1,q[M];
LL a[M],b[M],f[M],sum1[M],sum2[M];
double Get(int x,int y)
{return (double)(f[x]+sum2[x]-f[y]-sum2[y])/(double)(sum1[x]-sum1[y]);
}
main()
{n=in();for (int i=1;i<=n;i++) a[i]=in();for (int i=1;i<=n;i++)b[i]=in(),sum1[i]=sum1[i-1]+b[i],sum2[i]=sum2[i-1]+b[i]*i;for (int i=1;i<=n;i++){while (head<tail&&Get(q[head+1],q[head])<i) head++;f[i]=f[q[head]]+(sum1[i]-sum1[q[head]])*i-(sum2[i]-sum2[q[head]])+a[i];while (head<tail&&Get(i,q[tail])<Get(q[tail],q[tail-1])) tail--;q[++tail]=i;}printf("%lld",f[n]);
}
【BZOJ3437】小P的牧场,斜率优化DP相关推荐
- BZOJ3437:小P的牧场(斜率优化DP)
Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1-n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制 ...
- NOI2007 货币兑换 - CDQ分治斜率优化dp
斜率优化dp维护一个凸壳.如果\(x, y\)坐标都递增,可以用单调队列,如果只有\(x\)递增,可以在凸壳上二分斜率,如果\(x, y\)都不递增,则需要在凸包中插入,可以用平衡树或cdq分治维护. ...
- CF-311B Cats Transport(斜率优化DP)
题目链接 题目描述 小S是农场主,他养了 \(M\)只猫,雇了 \(P\) 位饲养员. 农场中有一条笔直的路,路边有 \(N\) 座山,从 \(1\) 到 \(N\)编号. 第 \(i\) 座山与第 ...
- 逊哥dp专题 总结(普通dp,斜率优化dp,数位dp)
dp真是博大精深,本渣自叹智商不足,但是就算是不足也要拼死一搏,怒燃之 poj 3934 题意:给你n个身高都不同的人,然后排队,如果两人之间的所有人都比他们俩矮,那么他们俩可以互相看见,问你如果要正 ...
- 斜率优化dp 的简单入门
不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...
- 『摆渡车 斜率优化dp及总结』
摆渡车的题解我已经写过一遍了,在这里,这次主要从斜率优化的角度讲一下摆渡车,并总结一下斜率优化会出现的一些奇奇怪怪的错误. 摆渡车 Description 有 n 名同学要乘坐摆渡车从人大附中前往人民 ...
- 【总结】斜率优化DP
于是,XSC062开始写总结. 斜率优化DP 前置芝士 单调队列优化DP(夹带私货) 正文 我们以一道题为例. 打印文章 双倍经验 三倍经验 Solution 明显DP. 那么DP式就是: f i = ...
- 斜率优化dp (P2365/P5785 任务安排)
斜率优化dp P2365 任务安排 解法一 O(N^3): 解法二:O(N^2): 代码如下: 解法三 O(N): 凸壳: 综上所述: 代码如下: P5785 [SDOI2012]任务安排 分析: 代 ...
- 学习笔记——斜率优化dp
注:文中全部图片均为手绘,不喜勿喷 总论 斜率优化是dp优化中极其常用的一种手法 第一点,先要懂什么是凸包与单调队列 先来看看凸多边形是什么样 接着再是斜率及斜率优化 一.凸包及凸多边形 凸多边形 就 ...
- #816 Div2E. Long Way Home 斜率优化dp
E. Long Way Home 斜率优化dp,dijkstra 题意 给定一个 n n n 个点, m m m 条边的带权无向图,边形如 < u , v , w > <u, v, ...
最新文章
- 一文读懂深度学习模型近年来重要进展(附梳理图)
- Windows XP权限
- 【Flutter】侧拉导航栏实现 ( Drawer 组件 | PageView 组件 )
- 为提高绩效,HR需要做的改进工作
- SpringBoot从入门到实战只需一篇文章
- web实现远程桌面:Apache Guacamole
- Oracle的服务介绍以及正常运行必须启动的服务
- Android开发之自带阴影效果的shape
- Java面向对象(2)--类的成员属性
- POJ 1064 分割线缆(二分查找)
- 【CSS】利用宽高比例的媒体查询
- 跟踪某个类所创建对象的个数
- Java之品优购部署_day02(2)
- 使用SharePoint Framework开发webpart的一些技巧汇总
- SNS背后的科:从六度分隔到无尺度网络,互联网营销
- c语言strict函数的作用,C语言实现进制转换函数的实例详解
- 【逻辑题】头花是什么颜色
- permission denied什么意思
- LDA与PCA数据降维算法理论与实现(基于python)
- [分享]深思--求索人的心智 就是求索长青基业[分享]深思--求索人的心智 就是求索长青基业...