【BZOJ 3156】防御准备
【链接】 链接
【题意】
在这里输入题意
【题解】
把a倒过来
设f[i]表示在i放一个防御塔的最小花费;
我们如果从j转移过来
就表示j+1..i-1这一段放人偶。
s[i] = 1 + 2 + ... + i;
则
$f[i] = fj + (s[i-1]-s[j]) -(i-1-j)*j + a[i]$
做一下斜率优化就好。
因为我们第一段可能一开始没有放防御塔。
所以先假设在第n个位置放了一个防御塔。
再枚举最后一段没放防御塔的情况。
【错的次数】
在这里输入错的次数
【反思】
转移方程那里一开始写成s[i-1]-s[j]了。。。错误地认为是i+1..j这一段了。而实际上是i+1..j-1这一段。
【代码】
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6;
int n,dl[N+10],h,t;
ll a[N+10],f[N+10],s[N+10];
double ju(int x,int y)
{
double fenzi = f[y]-s[y]+1LL*y*y+y-(f[x]-s[x]+1LL*x*x+x);
double fenmu = y-x;
return fenzi/fenmu;
}
int main()
{
//freopen("F:\\rush.txt","r",stdin);
scanf("%d",&n);
for (int i = n;i >= 1;i--) scanf("%lld",&a[i]);
for (int i = 1;i <= n;i++) s[i] = s[i-1] + i;
f[1] = a[1];
h = t = 1;
dl[1] = 1;
for (int i = 2;i <= n;i++)
{
while (h < t && ju(dl[h],dl[h+1]) < i) h++;
int j = dl[h];
f[i] = f[j] + (s[i-1]-s[j])-1LL*(i-1-j)*j + a[i];
while (h < t && ju(dl[t-1],dl[t]) > ju(dl[t],i)) t--;
dl[++t] = i;
}
ll ans = f[n];
for (int i = 1;i<=n-1;i++)
ans=min(ans,f[i]+s[n]-s[i]-1LL*(n-i)*i);
printf("%lld\n",ans);
return 0;
}
【BZOJ 3156】防御准备的更多相关文章
- BZOJ 3156: 防御准备 斜率优化DP
3156: 防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...
- bzoj 3156 防御准备(斜率DP)
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 837 Solved: 395[Submit][Status][Discuss] ...
- 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 防御准备
也是斜率优化....推下式子就好了. #include<iostream> #include<cstdio> #include<cstring> #include& ...
- bzoj 3156: 防御准备【斜率优化dp】
就是套路咯,设s[i]为1+2+...i 首先列出dp方程\( f[i]=min(f[j]+a[i]+(i-j)*i-(s[i]-s[j])) \) 然后推一推 \[ f[i]=f[j]+a[i]+( ...
- DP的优化总结
一.预备知识 \(tD/eD\) 问题:状态 t 维,决策 e 维.时间复杂度\(O(n^{e+t})\). 四边形不等式: 称代价函数 w 满足凸四边形不等式,当:\(w(a,c)+w(b,d)\l ...
- 【BZOJ】【3156】防御准备
DP/斜率优化 斜率优化的裸题…… sigh……又把$10^6$当成10W了……RE了N发 这题还是很水的 当然逆序也能做……不过还是整个反过来比较顺手 反转后的a[0]=反转前的a[n],以此类推直 ...
- 【BZOJ-3156】防御准备 DP + 斜率优化
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 951 Solved: 446[Submit][Status][Discuss] ...
- BZOJ3156: 防御准备
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 442 Solved: 210[Submit][Status] Descript ...
随机推荐
- ES6--基础语法(一)
一.支持环境:node.js完全支持,标准浏览器完全支持.二.测试环境: chrome下需要在script标签的最先开始的地方需要添加"use strict". firefox下需 ...
- factor---将素数分解为质数
- virmon防火墙64位正式版(暂定)公布
ChangeLog: 2015-06-2564位版本号签名问题临时得到解决.还要致谢一下某位黑客. 支持版本号x64 Windows Vista.7.8.8.1以上等.个人仅仅在Windows7上做了 ...
- [BZOJ1672][Usaco2005 Dec]Cleaning Shifts 清理牛棚 线段树优化DP
链接 题意:给你一些区间,每个区间都有一个花费,求覆盖区间 \([S,T]\) 的最小花费 题解 先将区间排序 设 \(f[i]\) 表示决策到第 \(i\) 个区间,覆盖满 \(S\dots R[i ...
- 非阻塞键盘检测getchar()
#include <stdio.h> #include <conio.h> #include <Windows.h> int main() { char c; wh ...
- JavaFx EventHandler
import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHan ...
- qt多线程
为什么要用多线程? 传统的图形用户界面应用程序都只有一个执行线程,并且一次只执行一个操作.如果用户从用户界面中调用一个比较耗时的操作,当该操作正在执行时,用户界面通常会冻结而不再响应.这个问题可以用事 ...
- http压测工具wrk
安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持LuaJIT和OpenSSL,不过不用担心,大多数类Unix系统都支持.安装wrk非常简单,只要从github上下载wrk源 ...
- View源码分析如何创建
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/jj120522 博主导读:View是Android中最重要的控件,几乎所有的控件都与View相 ...
- ecshop微信接口基础认识
ecshop微信接口基础认识,当你要学习ecshop和微信整合的时候,你就必须研究ecshop的数据结构对接以及微信数据接口的基本知识.我们知道微信其实就是通过有效的消息推送,用JSON格式的数据或者 ...