博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1911: [Apio2010]特别行动队
阅读量:5257 次
发布时间:2019-06-14

本文共 997 字,大约阅读时间需要 3 分钟。

又是斜率dp= =

f[i]=MAX(f[x]+a*sqr(f[i]-f[x])+b*(f[i]-f[x])+c)

设对于f[x] f[i]+a*sqr(s[x]-s[i])+b*(s[x]-s[i])+c>f[j]+a*sqr(s[x]-s[j])+b*(s[x]-s[j])+c

整理得 (v(i)-v[j])/(s[i]-s[j])<2a*s[x]  (v[x]=f[x]+a*s[x]*s[x]-b*s[x])

然后就证明s[x]单调

就行了

CODE:

#include<cstdio>

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 1000010
long long f[maxn],sum[maxn];
int s[maxn],a,b,c,n;
long long v(int x,int y){
 return (f[x]+a*sum[x]*sum[x]-b*sum[x])-(f[y]+a*sum[y]*sum[y]-b*sum[y]);
}
int main(){
 scanf("%d",&n);
 scanf("%d%d%d",&a,&b,&c);
 for (int i=1;i<=n;i++) {
  int x;
  scanf("%d",&x);
  sum[i]=sum[i-1]+x;
 }
 s[1]=0;
 int h=1,t=1;
 for (int i=1;i<=n;i++){
  while (h<t&&v(s[h],s[h+1])<=2*a*sum[i]*(sum[s[h]]-sum[s[h+1]]))h++;
  f[i]=f[s[h]]+a*(sum[i]-sum[s[h]])*(sum[i]-sum[s[h]])+b*(sum[i]-sum[s[h]])+c;
  while (h<t&&v(s[t],i)*(sum[s[t-1]]-sum[s[t]])>=v(s[t-1],s[t])*(sum[s[t]]-sum[i])) t--;
  s[++t]=i;
 }
 printf("%lld\n",f[n]);
 return 0;
}

转载于:https://www.cnblogs.com/New-Godess/p/4348956.html

你可能感兴趣的文章
SQLserver锁和事务隔离级别的比较与使用(转)
查看>>
Problem B: 分数类的类型转换
查看>>
python-zmail发送邮件
查看>>
RabbitMQ-rabbitmqctl和插件使用(四)
查看>>
Scrapy中的反反爬、logging设置、Request参数及POST请求
查看>>
吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:设定单词首字母大写
查看>>
C程序-进程内存结构分析
查看>>
bzero()函数
查看>>
dom节点相关问题
查看>>
【CF 453A】 A. Little Pony and Expected Maximum(期望、快速幂)
查看>>
LINUX下通过外部SMTP发邮件 (直接抛弃sendmail和postfix)
查看>>
Hdoj 1517.A Multiplication Game 题解
查看>>
杂谈:Servlet(2)
查看>>
内联函数 在ios中的运用 --黄仁斌
查看>>
UVa 10305 - Ordering Tasks ( 拓扑排序, DFS, DAG )
查看>>
24. Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
查看>>
poj 3259 Wormholes ([kuangbin带你飞]专题四 最短路练习)
查看>>
数据库查询出来的数据放入表格中
查看>>
ajax获取值的两种方法
查看>>
电梯调度实施
查看>>