【bzoj1010-toy】斜率优化入门模板
dsy1010: [HNOI2008]玩具装箱
【题目描述】
有n个数,分成连续的若干段,每段(假设从第j个到第i个组成一段)的分数为 (X-L)^2,X为j-i+Sigma(Ck) i<=k<=j,其中L是一个常量。目标:各段分数的总和最小。
【输入格式】
第一行:两个整数N,L.下来N个数字Ci.1<=N<=50000,1<=L,Ci<=10^7
【输出格式】
一个整数,各段分数总和的值最小。
Sample Input
5 4
3 4 2 1 4
Sample Output
1
维护一个右下凸包。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std; typedef long long LL;
const LL N=;
LL n,L,NL,f[N],sum[N],s[N],Q[N]; // f[i]=a[i]*x[j]+b[j]
// LL=L+1
// a[i]=-2*(s[i]-LL)
// x[j]=s[j]
// b[j]=f[j]+s[j]^2 double X(LL i){return s[i];}
double Y(LL i){return f[i]+s[i]*s[i];}
double find_k(LL i,LL j){return (Y(j)-Y(i))/(X(j)-X(i));} int main()
{
// freopen("a.in","r",stdin);
freopen("toy.in","r",stdin);
freopen("toy.out","w",stdout);
scanf("%lld%lld",&n,&L);
sum[]=;s[]=;NL=L+;
for(int i=;i<=n;i++)
{
LL x;
scanf("%lld",&x);
sum[i]=sum[i-]+x;
}
for(int i=;i<=n;i++) s[i]=sum[i]+i;
// for(LL i=1;i<=n;i++) printf("%d ",sum[i]);printf("\n");
// for(LL i=1;i<=n;i++) printf("%d ",s[i]);printf("\n");
LL l=,r=,j,ai,xj,bj,ti;
double k;
memset(f,,sizeof(f));
for(int i=;i<=n;i++)
{
ai=(-)*(s[i]-NL);
while(l<r && find_k(Q[l],Q[l+])<=(-ai) ) l++;
j=Q[l];
xj=s[j];
bj=f[j]+s[j]*s[j];
ti=(s[i]-NL)*(s[i]-NL);
f[i]=ai*xj+bj+ti;
while(l<r && find_k(Q[r],Q[r-])>find_k(i,Q[r])) r--;
Q[++r]=i;
}
printf("%lld\n",f[n]);
return ;
}
【bzoj1010-toy】斜率优化入门模板的更多相关文章
- 斜率优化入门学习+总结 Apio2011特别行动队&Apio2014序列分割&HZOI2008玩具装箱&ZJOI2007仓库建设&小P的牧场&防御准备&Sdoi2016征途
斜率优化: 额...这是篇7个题的题解... 首先说说斜率优化是个啥,额... f[i]=min(f[j]+xxxx(i,j)) ; 1<=j<i (O(n^2)暴力)这样一个式子,首 ...
- bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 11893 Solved: 5061[Submit][S ...
- 【bzoj1010】[HNOI2008]玩具装箱toy 斜率优化dp
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- 【BZOJ1010】【HNOI2008】玩具装箱toy (斜率优化DP) 解题报告
题目: 题目在这里 思路与做法: 这题不难想. 首先我们先推出一个普通的dp方程: \(f_i = min \{ f_j+(i-j-1+sum_i-sum_j-L)^2\}\) 然后就推一推式子了: ...
- bzoj1010: [HNOI2008]玩具装箱toy——斜率优化
方程 $\Large f(i)=min(f(j)+(s(i)-s(j)-1-L)^2)$ 其中$s(i)$为i的前缀和再加上$i$ 对于某个$i$若$j$比$k$优,则 $\large f(j)+(s ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- 『玩具装箱TOY 斜率优化DP』
玩具装箱TOY(HNOI2008) Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊 ...
- hdu3507 Print Article(斜率优化入门)(pascal)
Problem Description Zero has an old printer that doesn't work well sometimes. As it is antique, he s ...
- Bzoj 1010: [HNOI2008]玩具装箱toy(斜率优化)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MB Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定 ...
随机推荐
- iOS-Debug Symbol(调试符号)
Debug Symbol(调试符号) 编译警告 从svn下载下来的文件,到处都是编译警告,看着不爽,找下原因,没想到还是一条大鱼 warning: (i386) /UsersLibrary/Devel ...
- Python request 简单使用
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...
- LeetCode - 35. Search Insert Position(48ms)
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- Visual Studio 2015安装包
点击下载
- 详谈P(查准率),R(查全率),F1值
怎么来的? 我们平时用的精度accuracy,也就是整体的正确率 acc = predict_right_num / predict_num 这个虽然常用,但不能满足所有任务的需求.比如,因为香蕉太多 ...
- 二分图的最大匹配——Hopcroft-Karp算法
http://blog.csdn.net/wall_f/article/details/8248373
- iOS-登录发送验证码时60秒倒计时,直接用
__block NSInteger timeout= ; //倒计时时间 KWeakSelf dispatch_queue_t queue = dispatch_get_global_queue(DI ...
- win7 redis
<?php /* windows下php安装redis扩展 php_redis下载地址:https://pecl.php.net/package/redis 点击redis安装版本后面的 DLL ...
- sometimes-ever js中创建数组,并往数组里添加元素
数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长 ...
- 批处理之FOR命令