bzoj 3675 [Apio2014]序列分割 斜率优化

用树莓派4B打造你的第一台开源智能车机:Automotive Grade Linux (AGL) 保姆级安装指南 本文详细介绍了如何使用树莓派4B和Automotive Grade Linux (AGL)打造开源智能车机。从硬件准备、系统选型到AGL的定制化安装和车载功能配置,提供了全面的保姆级指南,帮助开发者快速实现车载信息娱乐系统的搭建与优化。 阅读详情

                               bzoj 3675

传送门:


Description

小H最近迷上了一个分割序列的游戏。在这个游戏里,小H需要将一个长 
度为N的非负整数序列分割成k+l个非空的子序列。为了得到k+l个子序列, 
小H将重复进行七次以下的步骤: 
1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的 
序列一一也就是一开始得到的整个序列); 
2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新 
序列。 
每次进行上述步骤之后,小H将会得到一定的分数。这个分数为两个新序 
列中元素和的乘积。小H希望选择一种最佳的分割方案,使得k轮(次)之后, 
小H的总得分最大。 

Input

输入文件的第一行包含两个整数n和尼(k+1≤n)。 
第二行包含n个非负整数a1,n2….,an(0≤ai≤10^4),表示一开始小H得 
到的序列。 

Output


一行包含一个整数,为小H可以得到的最大得分。 

Sample Input

7 3
4 1 3 4 0 2 3

Sample Output

108

HINT



【样例说明】 

在样例中,小H可以通过如下3轮操作得到108分: 

1.-开始小H有一个序列(4,1,3,4,0,2,3)。小H选择在第1个数之后的位置 

将序列分成两部分,并得到4×(1+3+4+0+2+3)=52分。 

2.这一轮开始时小H有两个序列:(4),(1,3,4,0,2,3)。小H选择在第3个数 

字之后的位置将第二个序列分成两部分,并得到(1+3)×(4+0+2+ 

3)=36分。 

3.这一轮开始时小H有三个序列:(4),(1,3),(4,0,2,3)。小H选择在第5个 

数字之后的位置将第三个序列分成两部分,并得到(4+0)×(2+3)= 

20分。 

经过上述三轮操作,小H将会得到四个子序列:(4),(1,3),(4,0),(2,3)并总共得到52+36+20=108分。 

【数据规模与评分】 

:数据满足2≤n≤100000,1≤k≤min(n -1,200)。



弱到连斜率优化都写了30多分钟。。。。。
题解在代码里

/**********
f[i]=max(g[j]+s[j]*(s[i]-s[j]))
对于j优于k
s[i]<(s[j]^2-s[k]^2+g[k]-g[j])/(s[j]-s[k])
**********/


#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#define MAXN  100005


using namespace std;
typedef long long ll;

ll sum[MAXN],f[MAXN],g[MAXN];

int n,K,a[MAXN],q[MAXN],top;


double cal(int j,int k)
{
    return (double)(sum[k]*sum[k]-sum[j]*sum[j]+g[j]-g[k])/(double)(sum[k]-sum[j]);
}
void tran(int x)
{
    int head=1,tail=0;
    for(int i=x;i<=n;i++)
    {
        while(head<tail&&cal(q[tail-1],q[tail])>cal(q[tail],i-1))
        tail--;
        q[++tail]=i-1;
        while(head<tail&&cal(q[head],q[head+1])<sum[i]) head++;
        int t=q[head];
        f[i]=g[t]+sum[t]*(sum[i]-sum[t]);
    }
    for(int i=x;i<=n;i++)
    swap(f[i],g[i]);
}

void dp()
{
    for(int i=1;i<=K;i++)
        tran(i);
        printf("%lld",g[n]);

}



int main()
{

    cin>>n>>K;
    for(int i=1;i<=n;i++)  cin>>a[i];
    for(int i=1;i<=n;i++)  if(a[i]!=0)
    a[++top]=a[i];
    n=top;
    for(int i=1;i<=n;i++)
    sum[i]=sum[i-1]+a[i];
    dp();
    return 0;
}



斗罗大陆叙事体系与战斗系统设计解析 在文学创作与游戏设计中,世界观构建和战斗系统设计是两大核心技术要素。世界观作为故事发生的背景框架,需要融合东西方文化元素并建立量化标准,如《斗罗大陆》中武魂觉醒与魂环等级体系。战斗系统则需突破简单数值对抗,发展出武魂特性、魂技组合与环境互动的三维体系,其中魂导器技术的引入展现了科技与魔法的创新融合。这些设计原理在RPG游戏开发、网络文学创作等领域具有广泛应用价值,特别是对需要长期运营的IP作品,完善的系统设定能有效支撑剧情延展与商业化开发。本文以现象级作品为例,剖析其武魂拟态理论和魂师工业化构思如何成就经典 阅读详情

相关推荐

树莓派通过TTL3.3转485 Modbus采集水表

所需道具 树莓派0,我用的是树莓派zero wh; 具有光电直读功能的有线水表,我用的是咸鱼淘的埃美柯LXSY-20E1; TTL3.3 转 485模块,带隔离的贵些; 5V转12V升压模块。 原理 树莓派有UART(GPIO14 Tx 和 GPIO15 Rx)串口通讯功能,电器特性是3.3V TTL,直读远传水表支持M-Bus/485通讯接口,我买的光电直读水表485要求12V供电(根据仪表厂家说明书)。TTL和485虽然都是串口通讯,但电器特性不一样,不能直接接!我已经烧掉一个树莓派...

xhydongda的博客 3442

[bzoj3675]序列分割

[bzoj3675]序列分割 斜率优化 不难发(cai)现(ce)答案与分割的顺序无关,所以可以直接从左到右分割来算 转移就是: f[i][k]=max{f[j][k-1]+l[i]*r[i+1]-l[j]*r[i+1]} r[i+1]是单减的,于是对于点 (l[j],f[j][[k-1]) 维护上凸壳,跑斜率优化即可。 代码 #include&lt;bits/stdc++.h...

jerome_wei的博客 251

数据字典实战:如何用Excel快速搭建你的第一个数据字典(附模板下载)

本文针对中小团队在软件开发中面临的术语不一致问题,提供了一套使用Excel快速搭建数据字典的实战指南。文章详细讲解了核心字段设计、填充示例、高阶技巧及团队协作维护流程,旨在通过这一轻量级工具统一团队共识、提升开发效率,并附有实用模板下载。

weixin_29303701的博客 380

bzoj-3675 序列分割

题意: 给出一个长度为n的序列和m次操作; 每次操作选择一个地方将序列分开,得分为左一半的和乘右一半; 求最大的总得分; 题解: 首先显然分割的顺序与得分无关,只要在那几个地方割就可以是最优解;         (为什么?难道要我@PoPoQQQ来证明一下?) 然后可以设状态为f[i][j],表示在前j个数里选择i个点分割的最大得分; 那么转移式显然为f[i][j]=max

140142 873

手把手教你用AD9834 DDS模块DIY一个可调信号源(附AD原理图/PCB/程序)

本文详细介绍了如何使用AD9834 DDS模块DIY一个高精度可调信号源,涵盖硬件搭建、原理图解读、PCB优化和程序烧录等关键步骤。通过STM32控制实现0-10MHz频率范围输出,特别适合电子设计与射频实验,提供完整的AD原理图、PCB设计和程序代码参考。

weixin_31854867的博客 407

SAP农产品增值税进项税解决方案

(三)购进农产品用于生产经营且不构成货物实体的(包括包装物、辅助材料、燃料、低值易耗品等),用于生产适用13%税率货物的扣除率为10%,用于生产适用9%税率货物的扣除率为9%。具体计算公式为: 当期允许抵扣农产品增值税进项税额=当期耗用农产品数量×农产品平均购买单价×扣除率/(1+9%)

weixin_44228539的博客 1195

bzoj 3675: [Apio2014]序列分割

Description 小H最近迷上了一个分割序列的游戏。在这个游戏里,小H需要将一个长  度为N的非负整数序列分割成k+l个非空的子序列。为了得到k+l个子序列,  小H将重复进行七次以下的步骤:  1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的  序列一一也就是一开始得到的整个序列);  2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新 

lqybzx的专栏 796

手把手教你用LangChain4j打造一个“会追问”的AI客服:以航空货运下单为例

本文详细介绍了如何使用LangChain4j构建一个能够主动追问的航空货运AI客服系统。通过对话状态管理、信息缺口识别和渐进式引导等核心技术,实现高效的多轮对话交互。文章包含从交互设计到代码实现的完整指南,特别强调了提示词(Prompt)在优化AI行为中的关键作用,帮助开发者打造更智能的客服解决方案。

weixin_28731223的博客 154

[bzoj3675] [Apio2014]序列分割 Split the sequence  dp+斜率优化

3675: [Apio2014]序列分割 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 1538 Solved: 637 [Submit][Status][Discuss] Description 小H最近迷上了一个分隔序列的游戏。在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列。为了得到k+1个子序列,小H

ATOD 1339

LCD工程师必看:MIPI DSI的LP/HS模式切换全流程拆解(附高通平台实测)

本文为LCD工程师深度解析MIPI DSI接口中低速(LP)与高速(HS)模式切换的全流程。文章结合高通平台实测波形,从协议状态机、时序关键参数到实战调试案例,系统拆解了模式切换的本质、协同机制及常见问题排查方法,重点阐述了LP模式在低功耗控制与HS模式在高速数据传输中的核心作用与切换时序。

weixin_29240711的博客 547

鼎阳示波器SCPI指令与MD5算法解锁带宽升级实战

本文详细介绍了鼎阳示波器通过SCPI指令与MD5算法实现带宽升级的实战流程。从设备连接、信息获取到Python密钥生成脚本解析,逐步指导用户完成升级操作,并涵盖常见问题排查与功能选件激活指南,帮助用户充分释放设备潜能。

www00的博客 346

BZOJ3675 [Apio2014]序列分割 斜率优化

BZOJ3675 [Apio2014]序列分割 斜率优化Description将一个长度为n的非负整数序列分割成k+1个非空的子序列。为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列——也就是一开始得到的整个序列); 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列。 每次进行上述步骤之后,将会得到

YJSheep 759

096、PCIE环回模式(Loopback):调试时自己和自己对话的利器

摘要: PCIE环回模式是调试利器,通过让芯片内部数据自环来定位问题层级。文章详解三种环回模式:物理层环回验证基础收发,数据链路层环回测试DLLP机制,事务层环回验证端到端协议。分享了实战中的典型问题(时钟异常、状态机卡死、计数器失真)和"从下往上"的调试流程,强调要区分调试与生产功能,建议早期验证环回模式。通过具体代码示例和调试案例,说明合理使用环回模式能显著提升排查效率,是PCIE调试必备技能。(149字)

z534437748的博客 105

BZOJ 3675 [Apio2014] 序列分割 斜率优化

题目大意:将一个长度为n的非负整数序列分割成k+1个非空的子序列,即将序列切割k次。首先选择一个长度超过1的序列;然后选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列。每次进行上述步骤之后,将会得到一定的分数。这个分数为两个新序列中元素和的乘积。求最大得分。首先,对于一段序列想分成A|B|C|D四份,先分成A|BCD与先AB|CD的得分是相同的。这样这个问题就具有了子问题的性质,可

YihAN_Z 445

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

BZOJ3675 [Apio2014]序列分割[斜率优化dp]

好久没写题解了惹,主要去省选玩了一趟之后就补文化课了,oi忘得差不多了。。 所以众所周知,这个人又来切水题了。 地址 发现题中划分是无序的,不利于dp。是否可以从左到右依次划分?然后发现不管我过程中怎么划分,顺序是什么,只要最终划分的块都一样,那价值肯定一样,因为对于最终每一块,他在过程中每次被划开时,和被划开的另一大块中每一个最终的小块都产生了一次价值,所以最终一个划分价值就...

dianer2977的博客 141

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

洛谷3648 BZOJ3675 APIO2014 序列分割 dp 斜率优化

题目链接 题意: 给你一个长度为nnn的序列,你要把它切kkk次分为k+1k+1k+1段,每次切开一块之后对答案的贡献是新的两个块的权值和的乘积。你现在要输出切kkk次后最大的权值和,洛谷上还要求输出分段的位置。 题解: 我们化一下式子会发现,你确定了所有要切的位置之后,我们会发现,切这些位置的先后顺序对答案没有影响。证明的话好像可以用个类似分配律的东西化一下吧。 我们考虑dp,我们设dp[i][...

forever_shi的博客 249

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

BZOJ 3675 APIO2014 序列分割 斜率优化

题目大意:给定一个序列,可以分割k次,每次分割的得分为两段序列的和的乘积 求最大得分 首先我们可以推出序列的分割顺序是不影响得分的 比如说我要把一个序列分割成四份ABCD 我先分割A BCD或者先分割AB CD最后的得分是一样的 证明?嗯……易证。显然嘛。哈哈。好吧我不会证。。。自己画一下推推就好 好吧这是神犇的证法:比如我将ABCD分割为AB CD 那么A就和CD各乘了一次 B也和CD各乘

世界 1999

bzoj 3675: [Apio2014]序列分割 斜率优化dp

题意小H最近迷上了一个分隔序列的游戏。在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列。为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列——也就是一开始得到的整个序列); 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列。 每次进行上述步骤之后,小H将会得到一定的分数。

beginend 497

BZOJ 3675 [Apio2014]序列分割 动态规划+斜率优化

Description 小H最近迷上了一个分隔序列的游戏。在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列。为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列——也就是一开始得到的整个序列); 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列。 每次进行上述步

I'm Growing 354

[BZOJ3675][Apio2014]序列分割(斜率优化dp)

不完满才是人生。

zyf2000 1092

bzoj3675 [APIO2014] 序列分割(斜率优化)

首先我们根据这个分割的过程可以发现:总得分等于k+1段两两的乘积的和(乘法分配律),也就是说与分割顺序是无关的。再对乘积进行重分组(还是乘法分配律)我们可以转化为:ans=∑第 i 段×前 i-1 段的和,那我们可以认为这k+1段是从左到右依次分出来的。假设目前这段是j+1…i,则他对答案的贡献为(sum[i]-sum[j])*sum[j].这样就很容易可以得到O(kn2)O(kn^2)的状态转移方

Icefox的博客 457

【BZOJ3675】[Apio2014]序列分割【斜率优化】

写了各种姿势,最后还是得照着网上题解才能AC= = 参考了凯爷blog:http://blog.youkuaiyun.com/lethelody/article/details/44781927 #include #include using namespace std; typedef long long LL; const int maxn = 100005, maxq =

BraketBN 493

bzoj 3675 [Apio2014]序列分割(斜率优化)

代码: #include using namespace std; const int MAXN=1e5+5; typedef long long ll; ll f[MAXN][2],sum[MAXN]; int a[MAXN],stk[MAXN]; int now,nxt; ll getUp(int k,int j) { return (f[k][now]-sum[k]*sum[k])-(f

bibibibi的博客 248

[BZOJ 3675][APIO 2014]序列分割(斜率优化DP)

题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=3675思路这题不是很难,但是坑了我一个下午+半个晚上才做出来,郁闷 首先设f[i][k]=长度为i的序列,划分了k次f[i][k]=长度为i的序列,划分了k次得到的分数,sum[i]=∑it=1Atsum[i]=\sum_{t=1}^i{A_t},即序列AA的前缀和 很容易推出DP方程:

某沙茶的OI代码库 2073

[BZOJ 3675][Apio2014]序列分割:DP斜率优化

点击这里查看原题DP方程:f[i][j]=max{f[i-1][k]+(sum[n]-sum[j])*(sum[j]-sum[k])} 可以使用斜率优化,复杂度O(nk),外侧循环切割次数,内层循环切割位置。不过注意,因为空间只有128mb,因此要使用滚动数组。(如果在BZOJ上交出现了0ms的TLE,一定是因为MLE了)/* User:Small Language:C++ Problem No.

SmallSXJ的博客 610

[BZOJ3675] [Apio2014]序列分割

[BZOJ3675] [Apio2014]序列分割 题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3675 https://www.luogu.org/problemnew/show/P3648 Solution 考虑乘法分配律,显然从右到左合并和任意顺序合并本质相同,那么容易得到一个普及组的\(\rm dp\): \[ f[i][j]...

weixin_30846599的博客 130
上一篇: bzoj 1858 序列操作 线段树
下一篇: bzoj 1071 [SCOI2007]组队 单调性
DJS_K_D
博客等级 码龄12年 2粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值