【BZOJ1911】[Apio2010]特别行动队 斜率优化DP
想了好久啊.。。。——黑字为第一次更新。——这里是第二次更新,维护上下凸包据题而论,第一种方法是化式子的方法,需要好的化式子的方法,第二种是偏向几何,十分好想,纯正的维护凸包的方法,推荐。
用了我感觉比较好写的一种(因为没写过维护凸包),另一种是维护(上)凸包的做法,本质一样?推荐http://www.mamicode.com/info-detail-345781.html。
网上的大多数解法:
DP:f[i]=max(f[j]+a*(sum[i]-sum[j])^2+b(sum[i]-sum[j])+c)
显然复杂度不对。
那么假设j>k且f[j]优于f[k]
f[j]-f[k]+a*(sum[j]^2-sum[k]^2)-b*(sum[j]-sum[k])>2*a*(sum[x]-sum[y])*sum[i] (过程省略,把已知的sum[i]放在一边,剩下的放在一边)
其实不太明白这个式子求的是啥,但是可以感受到其中的单调之力(用里面的单调函数应该能科学的证明),我理解为“优度”,优度>sum[i]时就是表示j>k且f[j]优于f[k]的时候,也就是用单调队列维护这个“优度”。(以上为强行YY出的解释)
于是就这样了。。。注意:a<0,除过来要变号(mdzz)
#include <iostream>
#include <cstdio>
#define N 1000000+100
#define ll long long
using namespace std;
ll sum[N],f[N];
int l,r,n,a,b,c,x;
int q[N];
inline int read()
{
int ans=,f=;
char c;
while (!isdigit(c=getchar())) if (c=='-') f=-;
ans=c-'';
while (isdigit(c=getchar())) ans=ans*+c-'';
return ans*f;
}
inline ll Pow(ll x) {return x*x;}
inline double Getk(int x,int y) {return (double)(f[x]-f[y]+a*(Pow(sum[x])-Pow(sum[y]))-b*(sum[x]-sum[y]))/(double)(*a*(sum[x]-sum[y]));}
int main()
{
n=read();
a=read(); b=read(); c=read();
for (int i=;i<=n;i++) x=read(),sum[i]=sum[i-]+x;
for (int i=;i<=n;i++)
{
while (l<r && Getk(q[l+],q[l])<sum[i]) l++;
int p=q[l];
f[i]=f[p]+a*Pow((sum[i]-sum[p]))+b*(sum[i]-sum[p])+c;
while (l<r && Getk(i,q[r])<Getk(q[r],q[r-])) r--;
q[++r]=i;
}
printf("%lld",f[n]);
return ;
}
【BZOJ1911】[Apio2010]特别行动队 斜率优化DP的更多相关文章
- bzoj1911[Apio2010]特别行动队 斜率优化dp
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 5057 Solved: 2492[Submit][Statu ...
- bzoj1911 [Apio2010]特别行动队——斜率优化DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1911 相当明显的斜率优化,很好做: 注意slp里面要有(double),以免出现精度问题. ...
- [APIO2010]特别行动队 --- 斜率优化DP
[APIO2010]特别行动队 题面很直白,就不放了. 太套路了,做起来没点感觉了. \(dp(i)=dp(j)+a*(s(i)-s(j))^{2}+b*(s(i)-s(j))+c\) 直接推出一个斜 ...
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- APIO2010 特别行动队 & 斜率优化DP算法笔记
做完此题之后 自己应该算是真正理解了斜率优化DP 根据状态转移方程$f[i]=max(f[j]+ax^2+bx+c),x=sum[i]-sum[j]$ 可以变形为 $f[i]=max((a*sum[j ...
- [Bzoj1911][Apio2010]特别行动队(斜率优化)
题目链接 斜率优化的经典模型,将序列分成若干段,每段有一个权值计算方法,求权值和最大/小 暴力的dp $O(n^{2})$ dp[i]为1-i的序列的最优解.sum[i]为前缀和,$D(i)=ax^{ ...
- bzoj 1911: [Apio2010]特别行动队 -- 斜率优化
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MB Description Input Output Sample Input 4 ...
- APIO 2010 特别行动队 斜率优化DP
Description 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如 (i ...
- BZOJ 1911 特别行动队(斜率优化DP)
应该可以看出这是个很normal的斜率优化式子.推出公式搞一搞即可. # include <cstdio> # include <cstring> # include < ...
随机推荐
- IIS网站或系统验证码不显示问题——"使用了托管的处理程序,但是未安装或未完整安装 ASP.NET"
在IIS上发布了一个系统,但是登陆页面的验证码图片一直出不来,尝试了各种办法,权限.路径.继承父类路径等都不管用,进入Login.html,对着无验证码图片的图标,右键复制图片的网址,粘贴到地址栏,出 ...
- DLL 生成与使用的全过程(2010-01-18 14:50:17)
转载自 水滴的博客http://blog.sina.com.cn/spiritofwater 个人学习用 转载▼ 分类: 技术 由dll导出的lib文件: 包含了每一个dll导出函数的符号名和 ...
- CorelDRAW各版本安装软件下载
CorelDRAW X8 SP6-32位64位免激活免登陆版 百度网盘下载地址 提取密码:1z6w CorelDraw X7 (64位) 简体中文完整版: 百度网盘下载地址 提取密码:sqaw C ...
- Sublime 3 如何配置SVN插件
在sublime里面安装svn的插件,就可以在sublime的操作界面里面进行相关svn操作,这样就不用再回到文件系统中,进行相关svn的操作. 1.在进入sublime界面后,点击顶部菜单“Pref ...
- ReWriteDateControll
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 打开eclipse报错
隔了一段时间没用eclipse, 打开之后报错: 从报错上来看是因为java版本太低导致的. 我打开cmd, 运行java -version 后 发现java 版本已经更新到了1.8 然后就有点懵. ...
- ASP.NET获取百度地图提供的API接口里面的JSON
思路:开始是想直接在前台获取,但是跨域访问还是有点难度,而且格式必须是josnp格式的,最后嫌麻烦,不得已放弃. 我做的ASP.NET 而这个有自带的解析类,直接引用就行了 先在后台获取到JOSN: ...
- winform中选择文件获取路径
private void button1_Click(object sender, EventArgs e) { //此时弹出一个可以选择文件的窗体 OpenFileDialog fileDialog ...
- Vim配置文件
转载 原文网址:http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim ...
- IDEA构建一个mybatis项目
目录结构如下: 在pom.xml中配置需要的jar包 <dependencies> <dependency> <groupId>org.mybatis</gr ...