传送门
写在前面:感觉线性基太蛋疼了
思路:
原始方程
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相关推荐

  1. BZOJ3437:小P的牧场(斜率优化DP)

    Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1-n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制 ...

  2. NOI2007 货币兑换 - CDQ分治斜率优化dp

    斜率优化dp维护一个凸壳.如果\(x, y\)坐标都递增,可以用单调队列,如果只有\(x\)递增,可以在凸壳上二分斜率,如果\(x, y\)都不递增,则需要在凸包中插入,可以用平衡树或cdq分治维护. ...

  3. CF-311B Cats Transport(斜率优化DP)

    题目链接 题目描述 小S是农场主,他养了 \(M\)只猫,雇了 \(P\) 位饲养员. 农场中有一条笔直的路,路边有 \(N\) 座山,从 \(1\) 到 \(N\)编号. 第 \(i\) 座山与第 ...

  4. 逊哥dp专题 总结(普通dp,斜率优化dp,数位dp)

    dp真是博大精深,本渣自叹智商不足,但是就算是不足也要拼死一搏,怒燃之 poj 3934 题意:给你n个身高都不同的人,然后排队,如果两人之间的所有人都比他们俩矮,那么他们俩可以互相看见,问你如果要正 ...

  5. 斜率优化dp 的简单入门

    不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...

  6. 『摆渡车 斜率优化dp及总结』

    摆渡车的题解我已经写过一遍了,在这里,这次主要从斜率优化的角度讲一下摆渡车,并总结一下斜率优化会出现的一些奇奇怪怪的错误. 摆渡车 Description 有 n 名同学要乘坐摆渡车从人大附中前往人民 ...

  7. 【总结】斜率优化DP

    于是,XSC062开始写总结. 斜率优化DP 前置芝士 单调队列优化DP(夹带私货) 正文 我们以一道题为例. 打印文章 双倍经验 三倍经验 Solution 明显DP. 那么DP式就是: f i = ...

  8. 斜率优化dp (P2365/P5785 任务安排)

    斜率优化dp P2365 任务安排 解法一 O(N^3): 解法二:O(N^2): 代码如下: 解法三 O(N): 凸壳: 综上所述: 代码如下: P5785 [SDOI2012]任务安排 分析: 代 ...

  9. 学习笔记——斜率优化dp

    注:文中全部图片均为手绘,不喜勿喷 总论 斜率优化是dp优化中极其常用的一种手法 第一点,先要懂什么是凸包与单调队列 先来看看凸多边形是什么样 接着再是斜率及斜率优化 一.凸包及凸多边形 凸多边形 就 ...

  10. #816 Div2E. Long Way Home 斜率优化dp

    E. Long Way Home 斜率优化dp,dijkstra 题意 给定一个 n n n 个点, m m m 条边的带权无向图,边形如 < u , v , w > <u, v, ...

最新文章

  1. 一文读懂深度学习模型近年来重要进展(附梳理图)
  2. Windows XP权限
  3. 【Flutter】侧拉导航栏实现 ( Drawer 组件 | PageView 组件 )
  4. 为提高绩效,HR需要做的改进工作
  5. SpringBoot从入门到实战只需一篇文章
  6. web实现远程桌面:Apache Guacamole
  7. Oracle的服务介绍以及正常运行必须启动的服务
  8. Android开发之自带阴影效果的shape
  9. Java面向对象(2)--类的成员属性
  10. POJ 1064 分割线缆(二分查找)
  11. 【CSS】利用宽高比例的媒体查询
  12. 跟踪某个类所创建对象的个数
  13. Java之品优购部署_day02(2)
  14. 使用SharePoint Framework开发webpart的一些技巧汇总
  15. SNS背后的科:从六度分隔到无尺度网络,互联网营销
  16. c语言strict函数的作用,C语言实现进制转换函数的实例详解
  17. 【逻辑题】头花是什么颜色
  18. permission denied什么意思
  19. LDA与PCA数据降维算法理论与实现(基于python)
  20. [分享]深思--求索人的心智 就是求索长青基业[分享]深思--求索人的心智 就是求索长青基业...

热门文章

  1. xtwpro2编程器_xtw100编程器驱动
  2. leetcode71 (2022.1.6)
  3. SpringCloud与Hystrix断路器
  4. 计算机图形学E6——倒水问题emm和OpenGL没啥关系
  5. leetcode59题:滑动窗口的最大值(用双端队列实现)
  6. windows下JAVA环境变量配置
  7. 例子---PHP与Form表单终结篇
  8. JavaScript萌新基础
  9. iphone字体_朋友圈换个花样字体,发个朋友圈也高级过人
  10. 匿名函数php作用,PHP匿名函数可以干什么用