bzoj3675: [Apio2014]序列分割
留坑
为什么别人家的斜率优化跟我一点都不一样!
为什么斜率都要变成正的。。。
为什么要那么推式子
为什么不能直接做啊。。。。。
为什么不把0去掉去秒WA啊
为什么叉积去了0也过不了啊
woc啊
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream> using namespace std; void setIO(const string& s) {
freopen((s + ".in").c_str(), "r", stdin);
freopen((s + ".out").c_str(), "w", stdout);
}
template<typename Q> Q read(Q& x) {
static char c, f;
for(f = ; c = getchar(), !isdigit(c); ) if(c == '-') f = ;
for(x = ; isdigit(c); c = getchar()) x = x * + c - '';
if(f) x = -x;
return x;
}
template<typename Q> Q read() {
static Q x; read(x); return x;
} typedef long long LL;
const int N = + ; LL sqr(const LL& x) {
return x * x;
} LL f[N], g[N], sum[N];
int q[N]; LL up(int i) {
return g[i] - sqr(sum[i]);
} LL up(int i, int j) {
return up(j) - up(i);
} LL down(int i, int j) { // >= 0
return sum[j] - sum[i];
} double slope(int i, int j) {
return up(i, j) / (double) down(i, j);
}
int n; struct Node {
LL x, y;
Node() {}
Node(const LL& x, const LL& y) : x(x), y(y) {}
Node operator - (const Node& rhs) const {
return Node(x - rhs.x, y - rhs.y);
}
}p[N]; LL Cross(const Node& a, const Node& b) {
return a.x * b.y - b.x * a.y;
} void dp(int st) {
int L = , R = ;
q[R++] = st;
for(int i = st + ; i <= n; i++) {
// while(L + 1 < R && -sum[i] < slope(q[L], q[L + 1])) L++;
// while(L + 1 < R && -sum[i] * down(q[L], q[L + 1]) < up(q[L], q[L + 1])) L++;
while(L + < R && Cross(Node(, -sum[i]), p[L + ] - p[L]) >= ) L++;
int j = q[L];
f[i] = g[j] + sum[j] * (sum[i] - sum[j]);
// while(L + 1 < R && slope(q[R - 2], q[R - 1]) < slope(q[R - 2], i)) R--;
// while(L + 1 < R && up(q[R - 2], q[R - 1]) * down(q[R - 2], i) < up(q[R - 2], i) * down(q[R - 2], q[R - 1])) R--;
Node u(sum[i], up(i));
while(L + < R && Cross(p[R - ] - p[R - ], u - p[R - ]) >= ) R--;
q[R] = i, p[R++] = u;
}
for(int i = st + ; i <= n; i++) g[i] = f[i];
} int main() {
#ifdef DEBUG
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif read(n);
int k = read<int>(); for(int i = ; i <= n; i++) {
int x = read<int>();
if(!x) i--, n--;
else sum[i] = sum[i-] + x;
// sum[i] = sum[i-1] + read<int>();
} for(int i = ; i <= k; i++) dp(i); printf("%lld\n", g[n]); return ;
}
bzoj3675: [Apio2014]序列分割的更多相关文章
- bzoj3675[Apio2014]序列分割 斜率优化dp
3675: [Apio2014]序列分割 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 3508 Solved: 1402[Submit][Stat ...
- BZOJ3675 [Apio2014]序列分割 【斜率优化dp】
3675: [Apio2014]序列分割 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 3366 Solved: 1355 [Submit][St ...
- [Bzoj3675][Apio2014]序列分割(斜率优化)
3675: [Apio2014]序列分割 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 4021 Solved: 1569[Submit][Stat ...
- BZOJ3675 [Apio2014]序列分割 动态规划 斜率优化
原文链接http://www.cnblogs.com/zhouzhendong/p/8697258.html 题目传送门 - BZOJ3675 题意 对于一个非负整数序列,小H需要重复k次以下的步骤: ...
- BZOJ3675 Apio2014 序列分割 【斜率优化】
Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首 ...
- BZOJ3675: [Apio2014]序列分割(斜率优化)
Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 4186 Solved: 1629[Submit][Status][Discuss] Descript ...
- 2018.09.29 bzoj3675: [Apio2014]序列分割(斜率优化dp)
传送门 斜率优化dp经典题目. 首先需要证明只要选择的K个断点是相同的,那么得到的答案也是相同的. 根据分治的思想,我们只需要证明有两个断点时成立,就能推出K个断点时成立. 我们设两个断点分成的三段连 ...
- [luogu3648][bzoj3675][APIO2014]序列分割【动态规划+斜率优化】
题目大意 让你把一个数列分成k+1个部分,使分成乘积分成各个段乘积和最大. 分析 首先肯定是无法开下n \(\times\) n的数组,那么来一个小技巧:因为我们知道k的状态肯定是从k-1的状态转移过 ...
- 【BZOJ-3675】序列分割 DP + 斜率优化
3675: [Apio2014]序列分割 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1420 Solved: 583[Submit][Statu ...
随机推荐
- Java学习----finally块
public class Test { String x; public static void main(String[] args) { Test test = new Test(); try { ...
- 18款js和jquery文字特效代码分享
18款js和jquery文字特效代码分享 jQCloud标签云插件_热门城市文字标签云代码 js 3d标签云特效关键词文字球状标签云代码 原生JS鼠标悬停文字球状放大显示效果代码 原生js文字动画圆形 ...
- Application(全局对象,ViewState
Application对象生存期和Web应用程序生存期一样长,生存期从Web应用程序网页被访问开始,HttpApplication类对象Application被自动创建,直到没有一个网页被访问时结束, ...
- MVC描述对象的类关系图/调用关系图【学习笔记】
- 关于64位Win7/Win 8 下怎么学习汇编语言
我看有许多同学用Win 7/Win 8 学习汇编,现在好多人的内存升级了都用64位系统了,但是64位W7没有自带的DEBUG和MASM. 1.首先下载DOSBOX,(下面附带地址)它的作用就是让你在6 ...
- Apache与Nginx的比较
1.Apache与Nginx的优缺点比较 nginx相对于apache的优点: 轻量级 : 同样起web 服务,比apache 占用更少的内存及资源 抗并发 : nginx 处理请求是异步非阻塞的,而 ...
- 静态代理VS动态代理
代理Proxy: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委 ...
- WPF的模版
此例子来自<深入浅出WPF>,刘铁猛. VS2010 源码1:不使用Bingding 源码2:使用Binding 下面展示一些代码: 主窗体XAML代码: <Window x:Cla ...
- jQuery设置按钮被点击状态
js和jquery如何使按钮失效,很简单,只要设置disabled属性为true即为不可用状态即可 1.JS方法一: document.getElementByIdx("btn") ...
- Python on Android
Python on Android Posted on April 29, 2015 by Alexander Taylor There are an increasing number of r ...