【BZOJ】【1911】【APIO2010】特别行动队commando
DP/斜率优化
嗯……第三道斜率优化的题目了。
定义 $s[i]=\sum_{k=1}^{i} x[k] $
方程:$f[i]=max\{ f[j]+a*(s[i]-s[j])^2+b*(s[i]-s[j])+c \} $
对于 $ j > k $
若决策 j 比 k 更优:\[ \begin{aligned} {f[j] + a*(s[i]-s[j])^2+b*(s[i]-s[j])+c} &> {f[k]+a*(s[i]-s[k])^2+b*(s[i]-s[k])+c} \\ {f[j]-f[k]+a*(s[j]^2-s[k]^2)-b*(s[j]-s[k])} &> {2a*s[i]*(s[j]-s[k])} \\ \frac{ f[j]-f[k]+a*(s[j]^2-s[k]^2)-b*(s[j]-s[k]) } { 2a*(s[k]-s[j]) } &> {s[i]} \end{aligned} \]
/**************************************************************
Problem: 1911
User: Tunix
Language: C++
Result: Accepted
Time:1260 ms
Memory:28616 kb
****************************************************************/ //BZOJ 1911
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>''){ if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<=''){ v=v*+ch-''; ch=getchar();}
return v*=sign;
}
const int N=1e6+;
typedef long long LL;
/******************tamplate*********************/
LL f[N],x[N],s[N];
int q[N],a,b,c;
double slop(int k,int j){
return double(f[j]-f[k]+a*(s[j]*s[j]-s[k]*s[k])+b*(s[k]-s[j]))/
double(*a*(s[j]-s[k]));
}
int main(){
#ifndef ONLINE_JUDGE
freopen("1911.in","r",stdin);
freopen("1911.out","w",stdout);
#endif
int n=getint();
a=getint(),b=getint(),c=getint();
F(i,,n){ x[i]=getint(); s[i]=s[i-]+x[i];}
int l=,r=;
F(i,,n){
while(l<r && slop(q[l],q[l+])<s[i])l++;
int t=q[l];
f[i]=f[t]+a*((s[i]-s[t])*(s[i]-s[t]))+b*(s[i]-s[t])+c;
while(l<r && slop(q[r-],q[r])>slop(q[r],i))r--;
q[++r]=i;
}
printf("%lld\n",f[n]);
return ;
}
1911: [Apio2010]特别行动队
Time Limit: 4 Sec Memory Limit: 64 MB
Submit: 3036 Solved: 1367
[Submit][Status][Discuss]
Description

Input

Output

Sample Input
-1 10 -20
2 2 3 4
Sample Output
HINT
Source
【BZOJ】【1911】【APIO2010】特别行动队commando的更多相关文章
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- bzoj 1911 [Apio2010]特别行动队(斜率优化+DP)
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3191 Solved: 1450[Submit][Statu ...
- BZOJ 1911: [Apio2010]特别行动队( dp + 斜率优化 )
sum为战斗力的前缀和 dp(x) = max( dp(p)+A*(sumx-sump)2+B*(sumx-sump)+C )(0≤p<x) 然后斜率优化...懒得写下去了... ------- ...
- bzoj 1911: [Apio2010]特别行动队 -- 斜率优化
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MB Description Input Output Sample Input 4 ...
- bzoj 1911: [Apio2010]特别行动队
#include<cstdio> #include<iostream> #define M 1000009 #define ll long long using namespa ...
- bzoj 1911: [Apio2010]特别行动队【斜率优化dp】
仔细想想好像没学过斜率优化.. 很容易推出状态转移方程\( f[i]=max{f[j]+a(s[i]-s[j])^2+b(s[i]-s[j])+c} \) 然后考虑j的选取,如果选j优于选k,那么: ...
- 【BZOJ】1911: [Apio2010]特别行动队(斜率优化dp)
题目 传送门:QWQ 分析 用$ dp[i] $ 表示前 i 个人组成的战斗力之和 然后显然$ dp[i]=Max ( dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum ...
- bzoj1911 [Apio2010]特别行动队commando
题目链接 斜率优化 #include<cstdio> #include<cstdlib> #include<string> #include<cstring& ...
- 1911: [Apio2010]特别行动队(斜率优化)
链接 思路 斜率优化dp. 代码 #include<cstdio> #include<algorithm> #include<cstring> #include&l ...
- 1911: [Apio2010]特别行动队
Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 5706 Solved: 2876[Submit][Status][Discuss] Descriptio ...
随机推荐
- C# 获取web.config配置文件内容
1.web.config提供对客户端应用程序配置文件的访问. 其有两个属性1.ConnectionStrings 获取当前应用程序默认配置的 ConnectionStringsSection 数据. ...
- 通过JAVA代码获取手机的一些基本信息(本机号码,SDK版本,系统版本,手机型号)
代码如下: package com.zzw.getPhoneInfos; import android.app.Activity; import android.content.Context; im ...
- redis安装与php扩展
redis安装:就是一个解压缩的过程 注意先运行:redis-server.exe,在运行redis-cli.exe. php扩展redis. 以上是如何选择相应的文件. 在把文件放在php/ext下 ...
- 在EF的code frist下写稳健的权限管理系统:开篇(一)
环境:EF6.0.0.0+Autofac3.5.0.0+MVC4.0+pure6.0+Jquery IDE:vs2012,数据库:vs2008r2 搭建环境如下: 我给它取名字为cactus:仙人球, ...
- Castle 集锦
Castle Windsor http://www.cnblogs.com/RicCC/archive/2010/03/30/castle-windsor-ioc-di.html 官方配置说明(反正我 ...
- the usage of key word "static" in java language
---恢复内容开始--- 作用 有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象.通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的 ...
- 一个朋友js图表开发遇到的问题 解决思路c和js
引言 不求知道一切, 只求发现一件 -- 乔治·西蒙·欧姆 附注:那些存在于梦幻中的事迹,那些儿时梦中的人物,每每看起,都觉得 .哎 .... 岁月 ... 一直在努力 ... ...
- SAP B1 ADDON 开发
承接各类SAP B1 ADDON 开发. 有需要,请联系.
- Mysql账号管理
一 用户添加 通过insert 方式添加用户 insert into mysql.user(Host,User,Password) values("localhost"," ...
- Android--启动系统的剪切图像功能并返回结果
直接上代码: //启动裁剪图片 private void cropPhotoUri(Uri uri){ Intent intent = new Intent("com.android.cam ...