当前位置: 首页 > news >正文

bzoj1911[Apio2010]特别行动队 斜率优化dp

1911: [Apio2010]特别行动队

Time Limit: 4 Sec  Memory Limit: 64 MB
Submit: 5057  Solved: 2492
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

4
-1 10 -20
2 2 3 4

Sample Output

9

HINT

 


dp[i]=dp[j]+a*x*x+b*x+c
x=sum[i]-sum[j]

证明单调性
假设对于i点 k<j且j的决策比k优
dp[j]+a*(sum[i]-sum[j])*(sum[i]-sum[j])+b*(sum[i]-sum[j])+c>=dp[k]+a*(sum[i]-sum[k])*(sum[i]-sum[k])+b*(sum[i]-sum[k])+c
化简得 dp[j]+a*sum[j]*sum[j]-2*a*sum[i]*sum[j]-b*sum[j]>=dp[k]+a*sum[k]*sum[k]-2*a*sum[i]*sum[k]-b*sum[k]

要证明单调性 需证明下面的式子
dp[j]+a*(sum[t]-sum[j])*(sum[t]-sum[j])+b*(sum[t]-sum[j])+c>=dp[k]+a*(sum[t]-sum[k])*(sum[t]-sum[k])+b*(sum[t]-sum[k])+c
化简得dp[j]+a*sum[j]*sum[j]-2*a*sum[t]*sum[j]-b*sum[j]>=dp[k]+a*sum[k]*sum[k]-2*a*sum[t]*sum[k]-b*sum[k]

设t>i 显然sum[t]>=sum[i] 设sum[t]=sum[i]+v
代入sum[t]得 dp[j]+a*sum[j]*sum[j]-2*a*sum[i]*sum[j]-b*sum[j]+v*sum[j]>=dp[k]+a*sum[k]*sum[k]-2*a*sum[i]*sum[k]-b*sum[k]+v*sum[k]
因为j>k 所以sum[j]>=k 上式成立,决策单调性得证
证毕

可以写出斜率式
dp[j]+a*sum[j]^2-2*a*sum[i]*sum[j]-b*sum[j]>=dp[k]+a*sum[k]^2-2*a*sum[i]*sum[k]-b*sum[k] 且j>k
=> dp[j]-dp[k]+a*sum[j]^2-a*sum[k]^2+b*sum[k]-b*sum[j]>=sum[i]*2*a*(sum[j]-sum[k])
=> (dp[j]-dp[k]+a*sum[j]^2-a*sum[k]^2+b*sum[k]-b*sum[j])/(2*a*(sum[j]-sum[k]))>=sum[i]

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<queue>
 5 #include<cmath>
 6 #include<vector>
 7 #include<cstdlib>
 8 #include<iostream>
 9 #define ll long long
10 #define inf 2147483647
11 #define N 1000005
12 using namespace std;
13 ll dp[N],sum[N];
14 int a,b,c,q[N];
15 ll pw(ll x){return x*x;}ll S(int j,int k){return 2*a*(sum[j]-sum[k]);}
16 ll G(int j,int k){return dp[j]-dp[k]+a*pw(sum[j])-a*pw(sum[k])+b*sum[k]-b*sum[j];}
17 double slope(int j,int k){return (double)G(j,k)/S(j,k);}
18 
19 int main(){
20     int n;
21     scanf("%d",&n);
22     scanf("%d%d%d",&a,&b,&c);
23     for(int i=1;i<=n;i++){
24         int x;
25         scanf("%d",&x);
26         sum[i]=sum[i-1]+x;
27     }
28     int h=1,t=2;
29     for(int i=1;i<=n;i++){
30         while(h+1<t&&slope(q[h],q[h+1])<=sum[i])h++;
31         int j=q[h],x=sum[i]-sum[j];
32         dp[i]=dp[j]+a*pw(x)+b*x+c;
33         while(h+1<t&&slope(i,q[t-1])<=slope(q[t-1],q[t-2]))t--;
34         q[t++]=i;
35     }
36     printf("%lld",dp[n]);
37     return 0;
38 }

 

转载于:https://www.cnblogs.com/wsy01/p/8124910.html

相关文章:

  • 通俗理解webService及.net中的使用方法
  • PHP后门的eval类和system类 函数到底有哪些区别
  • mint-ui 填坑之路
  • 秒懂Vuejs、Angular、React原理和前端发展历史
  • Java定时器应用
  • 模型分离(选做)
  • 游戏全区全服和分区分服 QQ斗地主的设计
  • 【习题 7-7 UVA-12558】Egyptian Fractions (HARD version)
  • 仿腾讯固定导航栏
  • window进行缩放时左侧菜单高度随之变化
  • 如何将pdf文件的英文翻译成中文
  • mac用BootCamp装windows装完之后驱动问题
  • Jquery命名冲突解决的五种方案
  • 【margin与padding的区别与用法】
  • MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解
  • CSS魔法堂:Absolute Positioning就这个样
  • Debian下无root权限使用Python访问Oracle
  • mac修复ab及siege安装
  • Meteor的表单提交:Form
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Zsh 开发指南(第十四篇 文件读写)
  • 初识 webpack
  • 前端学习笔记之观察者模式
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • Java性能优化之JVM GC(垃圾回收机制)
  • 如何在招聘中考核.NET架构师
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (libusb) usb口自动刷新
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (MATLAB)第五章-矩阵运算
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (算法二)滑动窗口
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net MySql
  • .NET 中 GetProcess 相关方法的性能
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • /var/lib/dpkg/lock 锁定问题
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @ResponseBody
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [Android Pro] AndroidX重构和映射
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [bzoj1901]: Zju2112 Dynamic Rankings