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\limits_{k=j+1}^{i}{(b[k]*i-b[k]*k)}+a[i])\)

再来前缀和处理一下就可以做到\(O(n^2)\)

\(f[i]=min(f[j]+(sum[i]-sum[j])*i-(sum\_k[i]-sum\_k[j])+a[i])\)

然后斜率优化加速

ps:斜率优化好多前缀和,都单调

\(f[i]=min(-sum[j]*i+sum[i]*i-sum\_k[i]+sum\_k[j]+a[i]+f[j])\)

\((-sum[j]*i+sum\_k[j]+f[j]) < (-sum[j]*i+sum\_k[j]+f[j])\)

\(sum\_k[j]-sum\_k[k]+f[j]-f[k] < (sum[j]-sum[k])*i\)

\(\frac{sum\_k[j]-sum\_k[k]+f[j]-f[k]}{(sum[j]-sum[k])} < i\)

错误原因

b[i]*i爆掉了,真的还是那句话,无处不炸longlong,气死啦

不过斜率优化真的模板哇

代码

#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
const int N=1e6+7;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,q[N],a[N],b[N];
ll sum[N],sum_k[N],f[N];
double calc(int j,int k) {
return (double)(sum_k[j]-sum_k[k]+f[j]-f[k])/(double)(sum[j]-sum[k]);
}
int main() {
n=read();
for(int i=1;i<=n;++i) a[i]=read();
for(int i=1;i<=n;++i) {
b[i]=read();
sum[i]=sum[i-1]+b[i];
sum_k[i]=sum_k[i-1]+(ll)b[i]*i;
}
/*
//@baoli
f[0]=0;
for(int i=1;i<=n;++i) {
f[i]=inf;
for(int j=0;j<i;++j)
f[i]=min(f[i],f[j]+(sum[i]-sum[j])*i-(sum_k[i]-sum_k[j])+a[i]);
}
*/
int h=1,d=1;
for(int i=1;i<=n;++i) {
while(h<d && calc(q[h],q[h+1]) < i) h++;
f[i]=f[q[h]]+(sum[i]-sum[q[h]])*i-(sum_k[i]-sum_k[q[h]])+a[i];
while(h<d && calc(q[d],q[d-1]) >= calc(q[d],i)) d--;
q[++d]=i;
}
cout<<f[n]<<"\n";
return 0;
}

bzoj 3437 小p的农场的更多相关文章

  1. BZOJ 3437: 小P的牧场 斜率优化DP

    3437: 小P的牧场 Description 背景 小P是个特么喜欢玩MC的孩纸... 描述 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场 ...

  2. bzoj 3437: 小P的牧场 -- 斜率优化

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MB Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号), ...

  3. bzoj 3436小K的农场

    3436: 小K的农场 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2327 Solved: 1105 [Submit][Status][Discu ...

  4. [bzoj]3436 小K的农场

    [题目描述] 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述:农场a比农场b至少多种植了c个单位的 ...

  5. BZOJ 3437 小P的牧场(斜率优化DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3437 [题目大意] n个牧场排成一行,需要在某些牧场上面建立控制站, 每个牧场上只能建 ...

  6. BZOJ 3436: 小K的农场 差分约束

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3436 题解: 裸的差分约束: 1.a>=b+c  ->  b<=a-c ...

  7. BZOJ 3437: 小P的牧场

    传送门 显然考虑 $dp$,设 $f[i]$ 表示前 $i$ 个牧场都被控制的最小代价 那么枚举所有 $j<i$ ,$f[i]=f[j]+val[i][j]+A[i]$ $val[i][j]$ ...

  8. bzoj 3437: 小P的牧场【斜率优化】

    emmm妹想到要倒着推 先假设只在n建一个控制站,这样的费用是\( \sum_{i=1}^{n} b[i]*(n-i) \)的 然后设f[i]为在i到n键控制站,并且i一定建一个,能最多节省下的费用, ...

  9. 【BZOJ】3436: 小K的农场

    3436: 小K的农场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 938  Solved: 417[Submit][Status][Discuss ...

随机推荐

  1. 导入转储文件的时候:Error Code: 1406. Data too long for column - MySQL

    MySQL will truncate any insert value that exceeds the specified column width. to make this without e ...

  2. 并发工具CyclicBarrier

    想想一下这样一个场景,有多个人需要过河,河上有一条船,船要等待满10个人才过河,过完河后每个人又各自行动. 这里的人相当于线程,注意这里,每个线程运行到一半的时候,它就要等待一个条件,即船满过河的条件 ...

  3. 【转】LoadRunner--Analysis各项指标详解

    转载:https://blog.csdn.net/liangfengchang/article/details/45070321 一.常用到的性能测试术语1.事务(Transaction) 在web性 ...

  4. sql server 将两列的值合并到另一列

    select top 100 t2.FullName, * from Subject,(select id, isnull(first_name,'') +isnull(middle_name,'') ...

  5. 定时调度任务quartz

    依赖 <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> < ...

  6. .net中的集合

    集合命令空间: 命令空间:类型逻辑上的分类 System.Collections  非泛型集合 System.Collections.Generic 泛型集合 集合内部存数据,实际上都是存到了数组里. ...

  7. HashMap的底层实现原理

    HashMap的底层实现原理1,属性static final int MAX_CAPACITY = 1 << 30;//1073741824(十进制)0100000000000000000 ...

  8. Linux环境变量和本地变量

    每一种编程语言中,我们都会碰到变量的作用域的问题.(比如在函数中定义的变量在函数外不能使用的) BASH 中也有类似的问题,局部变量和环境变量(全局变量). 局部变量是普通的变量,仅在创建它的Shel ...

  9. 转:MD5辅助类

    public class MD5Helper { private static MD5 md5 = new MD5CryptoServiceProvider(); private static str ...

  10. 国外互联网大企业(flag)的涨薪方式

    国外互联网大企业(flag)指的是:Facebook,Google,Amazon,LinkedIn 至于 A 代表哪家公司存在争议:有人说是Amazon,也有说是Apple,现在更有人说应该是AirB ...