3437: 小P的牧场

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 1493  Solved: 830
[Submit][Status][Discuss]

Description

小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制站控制的牧场是它所在的牧场一直到它西边第一个控制站的所有牧场(它西边第一个控制站所在的牧场不被控制)(如果它西边不存在控制站,那么它控制西边所有的牧场),每个牧场被控制都需要一定的花费(毕竟在控制站到牧场间修建道路是需要资源的嘛~),而且该花费等于它到控制它的控制站之间的牧场数目(不包括自身,但包括控制站所在牧场)乘上该牧场的放养量,在第i个牧场建立控制站的花费是ai,每个牧场i的放养量是bi,理所当然,小P需要总花费最小,但是小P的智商有点不够用了,所以这个最小总花费就由你来算出啦。

Input

第一行一个整数 n 表示牧场数目

第二行包括n个整数,第i个整数表示ai

第三行包括n个整数,第i个整数表示bi

Output

只有一行,包括一个整数,表示最小花费

Sample Input

4
2 4 2 4
3 1 4 2

Sample Output

9

很简单的斜率DP

首先最后一个牧场一定要放控制站,先假设其它地方都不放,求出价格

dp[i]表示在i处建站能节省的最多费用,有

sum[i] = ∑b[i]

dp[i] = max(dp[j]+sum[i]*(j-i), j∈(i, n] )-a[i]

ans = ∑b[i]*(n-i)-max(dp[i], i∈[1, n] )

#include<stdio.h>
#include<algorithm>
using namespace std;
#define LL long long
LL a[1000005], b[1000005], sum[1000005], dp[1000005], st[1000005];
double Jud(int j, int k)
{return 1.0*(dp[j]-dp[k])/(k-j);
}
int main(void)
{LL i, n, ans, bet, l, r;scanf("%lld", &n);for(i=1;i<=n;i++)scanf("%lld", &a[i]);for(i=1;i<=n;i++){scanf("%lld", &b[i]);sum[i] = sum[i-1]+b[i];}ans = a[n];for(i=1;i<=n;i++)ans += b[i]*(n-i);l = 1, r = 1;st[1] = n;bet = 0;for(i=n-1;i>=1;i--){while(r>l && Jud(st[l], st[l+1])>sum[i])l++;dp[i] = dp[st[l]]+sum[i]*(st[l]-i)-a[i];bet = max(bet, dp[i]);while(r>l && Jud(st[r], i)>Jud(st[r-1], st[r]))r--;st[++r] = i;}printf("%lld\n", ans-bet);return 0;
}

bzoj 3437: 小P的牧场(斜率DP)相关推荐

  1. bzoj 3437 小p的农场

    bzoj 3437 小p的农场 思路 \(f[i]=min(f[j]+\sum\limits_{k=j+1}^{i}{b[k]*(i-k)}+a[i])\) \(f[i]=min(f[j]+\sum\ ...

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

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

  3. bzoj 1096: [ZJOI2007]仓库建设(斜率DP)

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 5232  Solved: 2324 [Submit][St ...

  4. HDU 3669 Cross the Wall(斜率DP+预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3669 题目大意:有n(n<=50000)个矩形,每个矩形都有高和宽,你可以在墙上最多挖k个洞使得 ...

  5. hdu 3480 斜率dp

    思路:很普通的斜率dp #include<cstdio> #include<cstring> #include<iostream> #include<algo ...

  6. bzoj 4447 小凸解密码

    bzoj 4447 小凸解密码 先将原始状态的 \(B\) 处理出来,可以发现,若不修改,则每次指定的起始位置不同,对这个环 \(B\) 带来的影响只有 \(B_0\) 不同,即每次 \(B_0=A_ ...

  7. 【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 ...

  8. bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...

  9. BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化dp

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

最新文章

  1. Oracle Grid Control 10.2.0.5 for Linux 安装和配置指南
  2. Grafana 6.4 正式发布!
  3. MySQL week()函数
  4. 剑指offer(刷题31-40)--c++,Python版本
  5. C语言关键字浅析-_Bool
  6. qq拼音输入法下载|qq拼音输入法纯净版下载
  7. 关于能力模型的思考总结
  8. vue瀑布流插件vue-waterfall-easy 2.x
  9. Android深入源码分析理解Aidl整体调用流程(雷惊风)
  10. 网线8芯线各自作用是什么?几种常用的网线定义行业标准
  11. 你今天真好看中文扫描版
  12. STM32F4-DMA及相关配置
  13. CAD怎么降低版本保存
  14. 2022年双十一百亿补贴,2022年聚划算双11玩法解读
  15. 【C3】cpu_wtd_sysfs
  16. JavaEddy的难题
  17. 从四大造字法看文字所承载的文化_中国四大造字法
  18. JQuery模板 :(六)JsViews - 基于JsRender并具有动态绑定功能的模板
  19. 分布式存储系统的分类
  20. JAVA微信公众号开发之二维码的创建与获取

热门文章

  1. python使用缩进来体现-Python使用缩进来体现代码之间的逻辑关系。
  2. python3 x默认使用的编码_Python3编码问题(Python2请忽略)
  3. vue + elementui 通过父子组件实现弹框
  4. 【王道计组笔记】总线(2):性能指标分析
  5. 【动态规划】P1018 线性dp:乘积最大
  6. LeetCode 172 阶乘后的0
  7. imageJ 如何下载plugin_如何给微服务架构的项目做验收测试?
  8. 使用logstash迁移es数据
  9. MyBatis扫描mapper
  10. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(10)签到题2题