题意:链接

方法:斜率优化DP

解析:这题BZ的数据我也是跪了,特意去网上找到当年的数据后面二十个最大的点都过了。就是过不了BZ。

看到这道题自己第一发DP是这么推得:

设f[i][j]是第j次分第i个的最大得分。

那么会推出来f[i][j]=max(f[k][j−1]+sum[i k]∗sum[1 k−1]或(sum[k i]∗sum[i+1 n]))然后我发现这个式子的复杂度非常高暂且不说。就光那个或的讨论就非常费劲。

于是想了想就放弃了这个念头。中规中矩的去想。

依照以往的思路设出状态f[i][j]代表前i个分j次的最大得分。

能推出转移方程

f[i][j]=max(f[k][j−1]+sum[k]∗(sum[j]−sum[k]))

之后对于例子手写一遍看出它的正确性后进行后面的讨论

我们发现假设n^2的枚举是肯定不行的。所以才去一种方式进行维护,由于有k的元素的存在,所以从斜率角度入手。

详细推导过程就不写了,得出的结果是:

f[j][tmp异或1]−f[k][tmp异或1]+sum[k]2−sum[j]2sum[k]−sum[j]<=sum[i]

则说明k比j优。

所以尾部就是维护g[j,k]

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 100010
#define K 210
using namespace std;
typedef unsigned long long ll;
ll sum[N],a[N],f[N][2],q[N];
ll n,k;
int tmp;
ll fy(int j1,int j2,int d)
{
return f[j1][d]-f[j2][d]+sum[j2]*sum[j2]-sum[j1]*sum[j1];
}
ll fx(int j1,int j2)
{
return sum[j2]-sum[j1];
}
int main()
{
scanf("%llu%llu",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%llu",&a[i]);
sum[i]=sum[i-1]+a[i];
}
tmp=0;
for(int j=1;j<=k;j++)
{
tmp^=1;
int head=0,tail=0;
q[head]=0;
for(int i=1;i<=n;i++)
{
while(head<tail&&fy(q[head],q[head+1],tmp^1)<=fx(q[head],q[head+1])*sum[i])head++;
while(head<tail&&fy(q[tail-1],q[tail],tmp^1)*fx(q[tail],i)>=fy(q[tail],i,tmp^1)*fx(q[tail-1],q[tail]))tail--;
int t=q[head];
f[i][tmp]=f[t][tmp^1]+sum[t]*(sum[i]-sum[t]);
q[++tail]=i;
}
}
printf("%llu\n",f[n][tmp]);
}

BZOJ 3675 APIO2014 序列切割 斜率优化DP的更多相关文章

  1. BZOJ 3675 [Apio2014]序列分割 (斜率优化DP)

    洛谷传送门 题目大意:让你把序列切割k次,每次切割你能获得 这一整块两侧数字和的乘积 的分数,求最大的分数并输出切割方案 神题= = 搞了半天也没有想到切割顺序竟然和答案无关...我太弱了 证明很简单 ...

  2. bzoj3675[Apio2014]序列分割 斜率优化dp

    3675: [Apio2014]序列分割 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 3508  Solved: 1402[Submit][Stat ...

  3. 【bzoj3675】[Apio2014]序列分割 斜率优化dp

    原文地址:http://www.cnblogs.com/GXZlegend/p/6835179.html 题目描述 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列 ...

  4. [APIO2014]序列分割 --- 斜率优化DP

    [APIO2014]序列分割 题目大意: 你正在玩一个关于长度为\(n\)的非负整数序列的游戏.这个游戏中你需要把序列分成\(k+1\)个非空的块.为了得到\(k+1\)块,你需要重复下面的操作\(k ...

  5. BZOJ 3675: [Apio2014]序列分割( dp + 斜率优化 )

    WA了一版... 切点确定的话, 顺序是不会影响结果的..所以可以dp dp(i, k) = max(dp(j, k-1) + (sumn - sumi) * (sumi - sumj)) 然后斜率优 ...

  6. 【斜率DP】BZOJ 3675:[Apio2014]序列分割

    3675: [Apio2014]序列分割 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 1066  Solved: 427[Submit][Statu ...

  7. P3648 [APIO2014]序列分割 斜率优化

    题解:斜率优化\(DP\) 提交:\(2\)次(特意没开\(long\ long\),然后就死了) 题解: 好的先把自己的式子推了出来: 朴素: 定义\(f[i][j]\)表示前\(i\)个数进行\( ...

  8. BZOJ 1010: 玩具装箱toy (斜率优化dp)

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

  9. BZOJ 1010 [HNOI2008]玩具装箱 (斜率优化DP)

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1010 思路 [斜率优化DP] 我们知道,有些DP方程可以转化成DP[i]=f[j]+x[i ...

随机推荐

  1. [NOIP2009提高组]靶形数独

    题目:洛谷P1074.Vijos P1755.codevs1174. 题目大意:给你一个数独,让你填完这个数独,并要求得分最大,问这个得分是多少(不能填完输出-1). 每个格子的得分是当前格子所填的数 ...

  2. 洛谷——P3374 【模板】树状数组 1

    https://www.luogu.org/problem/show?pid=3374 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输 ...

  3. Dig A Well For Yourself

    See Paul's essay:  , I found paul is a genius, double checking. Mars June 2015

  4. POJ2485 Highways 【MST】

    Highways Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22842   Accepted: 10525 Descri ...

  5. mahout处理路透社语料步骤,转换成须要的格式

    首先下载路透社语料(百度就能够下载): 然后上传Linux 并解压到指定文件夹.Tips:此处我放在可 /usr/hadoop/mahout/reutersTest/reuters tar -zxvf ...

  6. 玲珑杯 Round #18 A -- 计算几何你瞎暴力

    因为坐标都在1-10之间,因此可暴力求解 #include <iostream> #include <cstdio> #include <cstring> #inc ...

  7. Debian9.5解决在root用户下启用VNC后lightdm+Xfce4只能使用root登录,其他用户无法登陆

    Debian9.5解决在root用户下启用VNC后lightdm+Xfce4只能使用root登录,其他用户无法登陆 最近在研究debian9.5 VNC的问题,当VNC使用tightVNC或tiger ...

  8. Cisco路由器交换机配置命令详解

    1. 交换机支持的命令: 交换机基本状态:switch: :ROM状态, 路由器是rommon>hostname> :用户模式hostname# :特权模式hostname(config) ...

  9. 织梦DedeCMS会员登录或退出后如何直接跳转到首页

    织梦dedecms默认情况下的会员登录后会直接跳转到会员中心,退出也是一样,但是如果我们想让会员登录后直接跳转到首页,那该如何实现呢? 经过我们的研究,已经找到解决办法,下面是详细的修改步骤: 首先在 ...

  10. css line-height详解

    行高指的是文本行的基线间的距离(更简单来说,行高是指文字尺寸与行距之间的和). 而基线(Base line),指的是一行字横排时下沿的基础线, 基线并不是汉字的下端沿,而是英文字母x的下端沿,同时还有 ...