3156: 防御准备

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 951  Solved: 446
[Submit][Status][Discuss]

Description

Input

第一行为一个整数N表示战线的总长度。

第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai。

Output

共一个整数,表示最小的战线花费值。

Sample Input

10
2 3 1 5 4 5 6 3 1 2

Sample Output

18

HINT

1<=N<=10^6,1<=Ai<=10^9

Source

Katharon+#1

Solution

斜率优化DP

方案由后面的转移? 翻转序列即可..

然后就是转移方程 $dp[i]=min(dp[i],dp[j]+sum[i-1]-sum[j]-(i-j-1)*j+A[i]$

然后斜率优化一下,比较的裸,然后即可

值得注意的地方:

转移的时候,$i=1$提前的处理出来..

在计算答案的时候,注意加long long否则会WA成狗..

Code

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int read()
{int x=0,f=1; char ch=getchar();while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}return x*f;
}
#define maxn 1000100
int n,A[maxn]; int que[maxn],l,r;
long long dp[maxn],sumid[maxn],ans;
double slope(long long i,long long j)
{return (double)(dp[i]-dp[j]-sumid[i]+sumid[j]+i-j+i*i-j*j)/(double)(i-j);}
int main()
{n=read(); ans=(long long)1<<60;for (int i=n; i>=1; i--) A[i]=read();for (int i=1; i<=n; i++) sumid[i]=sumid[i-1]+i;dp[1]=A[1]; que[1]=1; l=r=1;for (int tmp,i=2; i<=n; i++){while (l<r && slope(que[l],que[l+1])<i) l++;tmp=que[l];dp[i]=dp[tmp]+sumid[i-1]-sumid[tmp]-(i-tmp-1)*tmp+A[i];while (l<r && slope(que[r],i)<slope(que[r-1],que[r])) r--;que[++r]=i;}for (int i=1; i<=n; i++) ans=min(ans,dp[i]+sumid[n]-sumid[i]-(long long)(n-i)*i);printf("%lld\n",ans);return 0;
}

上文所述WA成狗...MDZZ

转载于:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5388392.html

【BZOJ-3156】防御准备 DP + 斜率优化相关推荐

  1. BZOJ 3156: 防御准备( dp + 斜率优化 )

    dp(i)表示处理完[i,n]且i是放守卫塔的最小费用. dp(i) = min{dp(j) + (j-i)(j-i-1)/2}+costi(i<j≤N) 然后斜率优化 ------------ ...

  2. bzoj 3156: 防御准备(斜率DP)

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2148  Solved: 912 [Submit][Status][Discu ...

  3. BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )

    既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...

  4. BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]

    4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[ ...

  5. BZOJ 2149 拆迁队 斜率优化DP 主席树

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2149 题目大意: 一个长度为 n n的序列aa,改变其中的某些数使之成为一个单调递增序列, ...

  6. [HNOI2008]玩具装箱toy(dp+斜率优化)

    斜率优化问题一般都是决策单调问题.对于这题能够证明单调决策. 令sum[i]=sigma(c [k] ) 1<=k<=i  ,  f[i]=sum[i]+i ,  c=L+1; 首先我们能 ...

  7. UVAlive 6131 dp+斜率优化

    这道题和06年论文<从一类单调性问题看算法的优化>第一道例题很相似. 题意:给出n个矿的重量和位置,这些矿石只能从上往下运送,现在要在这些地方建造m个heap,要使得,sigma距离*重量 ...

  8. hdu 3507 Print Article(dp+斜率优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3507 题解:显然这题的递推很容易得到 dp[i]=dp[j]+(sum[i]-sum[j])^2+m ...

  9. C++剑指offer:解题报告之DP优化学习记 (二) ——浅论DP斜率优化 (Print Article 【HDU - 3507】 )

    链接:https://share.weiyun.com/5LzbzAc 目录 前言 斜率优化前期准备 1.从状态转移方程出发 2.推理状态转移方程 对结论的进一步推导 干货!综合结论 判断斜率大小的方 ...

最新文章

  1. [翻译]How JavaScript Timers Work
  2. JS删除数组元素的函数介绍
  3. linux内核定义注册设备,linux字符型设备驱动 一.注册设备并创建设备文件
  4. IDEA快速生成构造器(构造函数)
  5. c语言编译成功,[C/CPP系列知识] 那些程序C语言可以编译通过但C++无法编译成功 Write a C program that won’t compile in C++...
  6. 腾讯云实时音视频技术发展简史 — 从编解码器容错优化到云端决策系统
  7. linux笔记 3-4 SMTP,.配置电子邮件传输
  8. 输入一个数,判断他是不是质数
  9. C# 利用反射动态创建对象[摘录]
  10. Android网络类型判断(2g、3g、wifi)
  11. 国内有哪些做H5走心的外包服务团队或公司?
  12. openFeign服务调用
  13. mysql 批量插入 性能_MySQL批量插入数据性能比较
  14. 码率自适应算法深入浅出
  15. 浏览记录-history
  16. Java小白入门200例81之Java接口
  17. vb.net操作数据库之ACCESS(一)
  18. Bot 崛起:你的企业需要考虑这11个重要问题
  19. 常见的js加密/js解密方法
  20. 聊聊工程师的专业职级晋升之道

热门文章

  1. 聊一聊bypass information_schema
  2. leetcode练习(简单总结做过的题)
  3. javascript 模板引擎基本原理
  4. 如何用github给开源贡献代码
  5. 为什么说 GraphQL 可以取代 REST API?
  6. Spark读写Hbase的二种方式对比
  7. scala的foreach和for
  8. 数十种TensorFlow实现案例汇集:代码+笔记
  9. Spark RDD使用详解4--Key-Value型Transformation算子
  10. linux解决病毒系列之一,删除十字符libudev.so病毒文件