【BZOJ-3156】防御准备 DP + 斜率优化
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
2 3 1 5 4 5 6 3 1 2
Sample Output
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 + 斜率优化相关推荐
- BZOJ 3156: 防御准备( dp + 斜率优化 )
dp(i)表示处理完[i,n]且i是放守卫塔的最小费用. dp(i) = min{dp(j) + (j-i)(j-i-1)/2}+costi(i<j≤N) 然后斜率优化 ------------ ...
- bzoj 3156: 防御准备(斜率DP)
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2148 Solved: 912 [Submit][Status][Discu ...
- BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...
- BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]
4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[ ...
- BZOJ 2149 拆迁队 斜率优化DP 主席树
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2149 题目大意: 一个长度为 n n的序列aa,改变其中的某些数使之成为一个单调递增序列, ...
- [HNOI2008]玩具装箱toy(dp+斜率优化)
斜率优化问题一般都是决策单调问题.对于这题能够证明单调决策. 令sum[i]=sigma(c [k] ) 1<=k<=i , f[i]=sum[i]+i , c=L+1; 首先我们能 ...
- UVAlive 6131 dp+斜率优化
这道题和06年论文<从一类单调性问题看算法的优化>第一道例题很相似. 题意:给出n个矿的重量和位置,这些矿石只能从上往下运送,现在要在这些地方建造m个heap,要使得,sigma距离*重量 ...
- hdu 3507 Print Article(dp+斜率优化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3507 题解:显然这题的递推很容易得到 dp[i]=dp[j]+(sum[i]-sum[j])^2+m ...
- C++剑指offer:解题报告之DP优化学习记 (二) ——浅论DP斜率优化 (Print Article 【HDU - 3507】 )
链接:https://share.weiyun.com/5LzbzAc 目录 前言 斜率优化前期准备 1.从状态转移方程出发 2.推理状态转移方程 对结论的进一步推导 干货!综合结论 判断斜率大小的方 ...
最新文章
- [翻译]How JavaScript Timers Work
- JS删除数组元素的函数介绍
- linux内核定义注册设备,linux字符型设备驱动 一.注册设备并创建设备文件
- IDEA快速生成构造器(构造函数)
- c语言编译成功,[C/CPP系列知识] 那些程序C语言可以编译通过但C++无法编译成功 Write a C program that won’t compile in C++...
- 腾讯云实时音视频技术发展简史 — 从编解码器容错优化到云端决策系统
- linux笔记 3-4 SMTP,.配置电子邮件传输
- 输入一个数,判断他是不是质数
- C# 利用反射动态创建对象[摘录]
- Android网络类型判断(2g、3g、wifi)
- 国内有哪些做H5走心的外包服务团队或公司?
- openFeign服务调用
- mysql 批量插入 性能_MySQL批量插入数据性能比较
- 码率自适应算法深入浅出
- 浏览记录-history
- Java小白入门200例81之Java接口
- vb.net操作数据库之ACCESS(一)
- Bot 崛起:你的企业需要考虑这11个重要问题
- 常见的js加密/js解密方法
- 聊聊工程师的专业职级晋升之道