link

试题分析

其实可以发现我们选择切的顺序可以颠换。

所以我们可以设$dp(i,j)$表示为前$i$个共切$j$的最大得分,然后$dp(i,j)=max(dp(i-1,z)+s[z] \times (s[i]-s[z])),s[i]=\sum_{i=1}^i  a_i$。

然后发现这是个斜率优化的式子,但是斜率只有一项,且为-$dp(i,j)$,所以我们虽然是要去维护上凸壳但其实事实上维护下凸壳。然后就基本斜率优化操作了。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define int long long
using namespace std;
inline int read(){int f=1,ans=0;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}return f*ans;
}
const int N=100011;
const int K=211;
int f[K][N],n,k,s[N],last[K][N],que[N],dp[N],g[N],X[N],Y[N];
signed main(){
//    freopen("10.in","r",stdin);n=read(),k=read();for(int i=1;i<=n;i++) s[i]=s[i-1]+read();for(int p=1;p<=k;p++){int l,r;l=r=1;que[1]=0;for(int i=1;i<=n;i++) g[i]=f[p-1][i];Y[0]=s[0]*s[0]-g[0],X[0]=s[0];for(int i=1;i<=n;i++){while(l<r&&(Y[que[l+1]]-Y[que[l]])<=s[i]*(X[que[l+1]]-X[que[l]])) l++;f[p][i]=f[p-1][que[l]]+s[que[l]]*(s[i]-s[que[l]]);last[p][i]=que[l];X[i]=s[i],Y[i]=s[i]*s[i]-g[i];while(l<r&&(Y[que[r]]-Y[que[r-1]])*(X[i]-X[que[r]])>=(Y[i]-Y[que[r]])*(X[que[r]]-X[que[r-1]])) r--;que[++r]=i;}}int r=n;printf("%lld\n",f[k][n]); for(int i=k;i>=1;i--){printf("%d ",last[i][r]);r=last[i][r];}
}

View Code

转载于:https://www.cnblogs.com/si-rui-yang/p/10121667.html

[APIO2014]序列分割相关推荐

  1. BZOJ3675: [Apio2014]序列分割

    BZOJ3675: [Apio2014]序列分割 Description 小H最近迷上了一个分隔序列的游戏. 在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列. 为了得到k ...

  2. BZOJ3675 [APIO2014]序列分割

    Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首 ...

  3. 动态规划(斜率优化):BZOJ 3675 [Apio2014]序列分割

    Description 小H最近迷上了一个分割序列的游戏.在这个游戏里,小H需要将一个长度为N的非负整数序列分割成k+l个非空的子序列.为了得到k+l个子序列, 小H将重复进行七次以下的步骤: 1.小 ...

  4. 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)

    点此看题面 大致题意: 你可以对一个序列进行\(k\)次分割,每次得分为两个块元素和的乘积,求总得分的最大值. 区间\(DPor\)斜率优化\(DP\) 这题目第一眼看上去感觉很明显是区间\(DP\) ...

  5. [APIO2014] 序列分割(斜率优化dp)

    problem luogu-P3648 你正在玩一个关于长度为 nnn 的非负整数序列的游戏.这个游戏中你需要把序列分成 k+1k+1k+1 个非空的块. 为了得到 k+1k+1k+1 块,你需要重复 ...

  6. 洛谷P3648 [APIO2014]序列分割(斜率优化)

    传送门 没想到这种多个状态转移的还能用上斜率优化--学到了-- 首先我们可以发现,切的顺序对最终答案是没有影响的 比方说有一个序列$abc$,每一个字母都代表几个数字,那么先切$ab$再切$bc$,得 ...

  7. bzoj 3675: [Apio2014]序列分割

    (一开始决策单调性证错了..(蛋疼)(其实是没有单调性的,怎么都一样),可以自己写一写i<j,先分i后分j,和先分j后分i是一样的) (而且犇蒟蒻发现斜率优化随便推上一个式子就可以了,(感觉比D ...

  8. 【BZOJ3675】【Apio2014】序列分割

    Description 传送门 Solution ​ 之前我也遇到过一次这种"两段之和乘积作为贡献"的问题:考虑把这一种\((\sum) *(\sum)\)的形式拆括号,就可以发现 ...

  9. (APIO2014)序列分割

    题解: 我也不知道为啥上午上课讲了我昨天看的3题 这题关键在于发现操作顺序无关的 可以发现最终答案是任意两段乘积的和 那这个东西显然是可以dp的 然后可以斜率优化一波 nklongn 另外上课讲的是当 ...

  10. P3648-[APIO2014]序列分割【斜率优化】

    正题 题目链接:https://www.luogu.com.cn/problem/P3648 题目大意 nnn个数字的序列,分割kkk次,每次的权值是左右两块数字的乘积.求最大权值和分割方案. 解题思 ...

最新文章

  1. js如何生成[n,m]的随机数
  2. 51单片机中将变量、数组、函数设置在固定位置,定位到绝对地址
  3. Promise和setTimeout执行顺序 面试题
  4. C#请求Post接口
  5. pytorch教程龙曲良01-05
  6. SpringCloud Nacos + Ribbon 调用服务的 2 种方法!
  7. JAVA编写的火车票售票系统
  8. Boot Hill 布特山
  9. linux 硬盘报警声
  10. 利用ffmpeg解析视频文件信息
  11. efm32芯片电压_Silicon Labs超低功耗32位 MCU EFM32HG系列成功应用在大华股份无线烟感...
  12. java 怎么做批量修改_JAVA实现批量修改文件名称
  13. 金 融 量 化 分 析 • JoinQuant • 第 七 篇
  14. 2019的百度网盘下载速度太慢老是限速怎么解决?
  15. 使用Linux命令cURL实现文件定时上传到ftp服务器的程序
  16. 深信服校园招聘c/c++ 软件开发A卷--菜鸡落泪
  17. java 语法错误_java菜鸟提问:编译时异常和语法错误的区别?
  18. SpringSecurity最新版本使用总结
  19. airbnb_Airbnb对观众情感联系的误解导致双重抵制
  20. 【各种装系统方法的差别以及性能】

热门文章

  1. ET vs Ad hoc
  2. SQLite3-轻量级数据库
  3. 密码保险箱 TBox
  4. ssl证书下载与安装 – 如何下载ssl证书
  5. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(2):开发环境及相关的使用技巧
  6. 【君思智慧园区】物业管理系统解决方案
  7. psp模拟器完美字库_透过模拟器看见那个疯狂的学习机年代(模拟器篇)(待续)...
  8. 液晶拼接处理器_大屏幕显示系统设备中矩阵与液晶拼接屏的连接方法
  9. 2022年R2移动式压力容器充装操作证考试题库及答案
  10. 基于SSM的图书商城的设计与实现(文末附源码)