博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1010: [HNOI2008]玩具装箱toy(dp+斜率优化)
阅读量:4680 次
发布时间:2019-06-09

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

 要写题解好像很长...不想写(不会写..) BZOJ discuss里讲得挺好的...

------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
 
#define Rep(i,l,r) for(int i=l;i<=r;++i)
 
using namespace std;
 
typedef long long ll;
const int maxn=50000+5;
 
ll sum[maxn];
ll d[maxn];
int q[maxn];
 
#define A(i) (sum[i]+i)
#define B(i) (A(i)+1+l)
#define X(k,j) (d[k]+B(k)*B(k)-d[j]-B(j)*B(j))
#define Y(k,j) (B(k)-B(j))
 
int main()
{
//
freopen("test.in","r",stdin);
//
freopen("test.out","w",stdout);
int n,l;
scanf("%d%d",&n,&l);
sum[0]=0;
Rep(i,1,n) {
int t; scanf("%d",&t);
sum[i]=sum[i-1]+t;
}
int front=0,rear=0; q[0]=d[0]=0;
Rep(i,1,n) {
while(rear>front && X(q[front+1],q[front])<=Y(q[front+1],q[front])*2*A(i)) ++front;
d[i]=d[q[front]]+(A(i)-B(q[front]))*(A(i)-B(q[front]));
while(rear>front && X(i,q[rear])*Y(q[rear],q[rear-1])*2<=X(q[rear],q[rear-1])*Y(i,q[rear])*2) --rear;
q[++rear]=i;
}
printf("%lld\n",d[n]);
return 0;
}

  

------------------------------------------------------------------------------ 

转载于:https://www.cnblogs.com/JSZX11556/p/4395038.html

你可能感兴趣的文章
【转】ubuntu12.04没有/var/log/messages解决
查看>>
几种队列
查看>>
Oracle EBS 初始化用户密码
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
函数的复写
查看>>
17_重入锁ReentrantLock
查看>>
winform窗口关闭提示
查看>>
64款工具,总有合适您的那款
查看>>
我的第一篇博客
查看>>
大数据学习线路整理
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
关于ProjectServer定制化项目中心页面
查看>>
使用Collectd + InfluxDB + Grafana进行JMX监控
查看>>
Linux下tar,zip命令详解
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
[ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
查看>>
Jenkins之Linux和window配置区别
查看>>
python之hasattr、getattr和setattr函数
查看>>