[bzoj2288][POJ Challenge][贪心][优先队列]生日礼物

nRF开发环境搭建全攻略:VS Code + nRF Connect SDK + Zephyr实战 嵌入式开发中,环境配置往往是新手入门的第一道障碍,尤其面对基于Zephyr RTOS的Nordic nRF平台时,工具链的复杂度常让人望而却步。理解构建系统、SDK版本管理和调试工具之间的协作关系,是高效开发的前提。Zephyr作为开源实时操作系统,通过设备树和Kconfig实现硬件描述与功能配置,而nRF Connect SDK(NCS)则是Nordic基于Zephyr的增强发行版,两者结合为物联网开发提供了强大支持。基于VS Code搭建开发环境,配合west工具管理多仓库、CMake/Ninja执行构 阅读详情

Description

ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, …, AN. 她被允许选择不超过 M
个连续的部分作为自己的生日礼物。

自然地,ftiasch想要知道选择元素之和的最大值。你能帮助她吗?

Input

第1行,两个整数 N (1 ≤ N ≤ 105) 和 M (0 ≤ M ≤ 105), 序列的长度和可以选择的部分。

第2行, N 个整数 A1, A2, …, AN (0 ≤ |Ai| ≤ 104), 序列。

Output

一个整数,最大的和。

Sample Input

5 2

2 -3 2 -1 2

Sample Output

5

题解

这题其实有点类似种树/数据备份那题
首先连续的一段正或者连续的一段负的缩成一个点,权为这一段的总和。这样这个序列就变成了正负相间的序列
如果正的点数目<=m时,我们不需要做任何处理,直接输出这些点的总和即可
如果不是,将所有点的绝对值加入堆,用一个链表记录这个点前后的是什么。我们每次取出绝对值最小的点,将他与他两边的点合并形成新点。对于每一次进行这样的操作,我们会发现正的点数一定会少1。如果取出的是负点,则代表取了这个负点两边的正点与负点的集合形成的一个新段。如果取出的是正点,则代表删除了这个点不再取。
需要注意的是负点的边界,因为如果一个负点在边界的时候我们再取他与两边合并是没有用的,特判一下

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef long long LL;
struct node
{
    int pos,c;
    friend bool operator <(node n1,node n2){return abs(n1.c)>abs(n2.c);}
};
priority_queue<node> q;
int n,m;
int a[110000];
int s[110000],ln;
int nxt[110000],pre[110000];
bool vis[110000];
void del(int x)
{
    vis[x]=false;
    pre[nxt[x]]=pre[x];
    nxt[pre[x]]=nxt[x];
}
int main()
{
//  freopen("a.in","r",stdin);
    //freopen("a.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    int sum=0,tt=0,ln=1;
    for(int i=1;i<=n;i++)
    {
        if((LL)s[ln]*a[i]>=0)s[ln]+=a[i];
        else s[++ln]+=a[i];
    }
    int ans=0;
    for(int i=1;i<=ln;i++)if(s[i]>0)ans+=s[i],sum++;
    for(int i=1;i<=ln;i++)pre[i]=i-1,nxt[i]=i+1;
    //pre[1]=nxt[ln]=-1;
    node tmp;
    for(int i=1;i<=ln;i++)
    {
        tmp.c=s[i];tmp.pos=i;
        q.push(tmp);
    }
    memset(vis,true,sizeof(vis));
    while(sum>m)
    {
        sum--;
        tmp=q.top();
        while(!vis[tmp.pos])q.pop(),tmp=q.top();
        q.pop();
        if(pre[tmp.pos]!=0 && nxt[tmp.pos]!=ln+1)ans-=abs(s[tmp.pos]);
        else if(s[tmp.pos]>0) ans-=s[tmp.pos];
        else {sum++;continue;}
        s[tmp.pos]=s[tmp.pos]+s[pre[tmp.pos]]+s[nxt[tmp.pos]];
        del(pre[tmp.pos]);del(nxt[tmp.pos]);
        tmp.c=s[tmp.pos];
        q.push(tmp);
    }
    printf("%d\n",ans);
    return 0;
}
万字长文:YOLOv5+RK3588 NPU多线程加速全攻略——从理论到部署的终极优化 RK3588 NPU多线程加速优化教程摘要 本教程深入讲解了如何利用线程池技术优化RK3588 NPU上的YOLO目标检测模型推理性能。RK3588内置3个NPU核心,理论算力达6TOPS,为多线程优化提供了硬件基础。教程详细解析了线程池的核心组件(任务队列、工作线程、同步机制)和实现架构,包括类设计、初始化流程、工作线程逻辑(任务获取、NPU推理、结果存储三个阶段)以及任务提交/获取机制。通过预分配模型实例、线程绑定、流量控制等优化手段,实现了从单线程28FPS到多线程120FPS的显著性能提升,为边缘A 阅读详情

相关推荐

Python+Selenium实战:5分钟搞定快手评论区数据采集(附完整代码)

本文详细介绍了如何使用Python和Selenium快速采集快手评论区数据,提供完整的代码实现和优化方案。通过动态加载处理和智能等待策略,5分钟内即可构建高效的评论采集工具,适用于用户行为分析和内容挖掘等场景。

weixin_30415113的博客 344

【BZOJ】2288: 【POJ Challenge】生日礼物-贪心+链表+堆

贪心

远行客 548

逆向工程师视角:拆解DataDome滑块验证码的3层防护机制与绕过思路

本文从逆向工程师视角,深入剖析DataDome滑块验证码的三层核心防护机制。第一层通过动态加密参数实现会话绑定与抗重放;第二层采集TLS指纹、鼠标轨迹动力学等多维行为数据进行一致性验证;第三层则是基于机器学习的后端异步风险决策引擎。文章不仅拆解了其技术原理,更分享了模拟、钩取等超越单纯工具调用的底层分析与绕过思路。

f6g7h8i9j的博客 731

bzoj2288 生日礼物(贪心)(堆)(链表)

题目 ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, …, AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物。 自然地,ftiasch想要知道选择元素之和的最大值。你能帮助她吗?   我的想法 相邻的两个数如果同为正数或负数可以合并成一个大的正数或负数,这样整个数列就成了正负交替的了。 当m=1时,最大子序列是答案。 我们考虑设置反悔...

A_Bright_CH的博客 528

Flannel,Calico 和 Cilium 之间有哪些优缺点和差别?

例如,在一个多租户的容器集群中,可以通过Calico为不同租户的容器设置精细的访问控制策略,确保每个租户的资源安全。例如,在设置复杂的网络策略和BGP路由时,需要对网络概念和Calico的配置语法有比较深入的了解。它可以根据容器的标签、服务等信息来定义访问规则,并且可以实现更加细粒度的网络安全策略,如HTTP层的策略。性能损耗:在overlay网络模式下(如VXLAN),由于需要对数据包进行额外的封装和解封装操作,会带来一定的性能损耗,尤其是在高流量的场景下,这种性能损耗可能会更加明显。

chinansa的博客 1529

STM32F407ZGT6开发板跑马灯实战:从原理图到烧录全流程(附FlyMcu配置)

本文以正点原子F4探索者开发板(STM32F407ZGT6)为例,手把手指导完成跑马灯实验。内容涵盖从原理图解读、GPIO驱动逻辑分析、HAL库工程搭建,到代码编写与FlyMcu串口烧录配置的全流程,帮助嵌入式开发新手快速实现第一个LED控制程序,打通软硬件开发链路。

weixin_29183637的博客 223

bzoj2288: 【POJ Challenge】生日礼物【贪心+优先队列+链表】

Description ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, …, AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物。 自然地,ftiasch想要知道选择元素之和的最大值。你能帮助她吗? Input 第1行,两个整数 N (1 ≤ N ≤ 105) 和 M (0 ≤ M ≤ 105), 序列的长度和可以选择的部分。 第...

cdsszjj的博客 847

主成分分析(PCA)简洁高效MATLAB实现详解

本文介绍了一个简洁高效的PCA算法实现。该实现通过SVD分解计算主成分,避免了显式协方差矩阵计算,支持两种降维方式:固定维度或按能量比例自动选择。核心步骤包括数据中心化、SVD分解和维度选择,代码量少但功能完整,适用于数据预处理、降维和特征提取等任务。实现中考虑了稀疏矩阵转换、默认参数处理等细节,可直接应用于MATLAB环境。

m0_62153576的博客 63

bzoj2288【POJ Challenge】生日礼物(贪心+堆)

首先我们把连续的正数/负数合成一个,因为显然要取都取。 然后开头结尾的负数可以去掉了,我们一定不会取。 这样我们就得到了正负正负…正的一个序列。记正数有cnt个,则若cnt<=m,把正数全取了即可。否则,m=cnt-m,我们需要做出一些牺牲。可以删去一个正数或者选上一个负数来使得两边的正数合成一个,共需要m次牺牲,我们肯定是要贪心取牺牲最小的。还有一个限制就是如果我们选了一个正数,则他两边的负数

Icefox的博客 491

【保姆级教程】基于UNet++&MobileNetv3的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv3作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

FJN110的博客 256

ABAP 里的 XML 与 JSON 处理,一套从接口落地到 Clean Core 的完整参考

ABAP 里的 XML 和 JSON 处理并不只是几段工具类调用。iXML、sXML、、XCO、、code page conversion、GZIP、对象序列化,这些能力背后对应的是不同的数据规模、访问模式、接口契约和运行时边界。小报文、复杂树结构、需要修改节点,iXML 很顺手。大报文、顺序读写、内存敏感,sXML 更可靠。ABAP 结构和 XML、JSON 之间要做标准转换,是主干。现代 JSON API、ABAP Cloud、命名转换,XCO 值得优先考虑。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 224

【BZOJ 2288】 2288: 【POJ Challenge】生日礼物 (贪心+优先队列+双向链表)

2288: 【POJ Challenge】生日礼物 Description ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列A1,A2, ...,AN. 她被允许选择不超过M个连续的部分作为自己的生日礼物。 自然地,ftiasch想要知道选择元素之和的最大值。你能帮助她吗? Input 第1行,两个整数N(1 ≤N...

weixin_30535167的博客 183

RH850从0搭建Autosar开发环境【23】- Davinci Configurator之DCM实操实现DID的读取写入

RH850从0搭建Autosar开发环境【23】- Davinci Configurator之DCM实操实现DID的读取写入,结合Developer实现

weixin_42412049的博客 1811

bzoj 2288: 【POJ Challenge】生日礼物 贪心+优先队列

题意给出一个长度为n的数列,要求从中取出不超过m段连续的数,使其和最大。 n<=100000分析之前看黄学长的blog说可以转换成数据备份,但却没有思路,看了题解后才恍然大悟。这题可以把一段同号的数并成一个数,那么就变成了一个正负交替的序列,然后把头尾的负数去掉。 有一种想法就是把所有的正值都加起来,然后把所有数的绝对值加进优先队列,每次去一个最小的出来然后减掉,最后的即为答案。 为什么是正确

beginend 1023

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

BZOJ 2288: 【POJ Challenge】生日礼物 优先队列+贪心+链表

这题看别人题解的 这题说可以转换成数据备份。这题可以把一段同号的数并成一个数,那么就变成了一个正负交替的序列,然后把头尾的负数去掉。然后就是把所有的正值都加起来,并统计正数的段数cnt,如cnt<=m,那么这些整数的和就是答案 如果cnt>m,那我们就要不断地去掉一段,直到cnt=m 先把所有数的绝对值加进优先队列,每次去一个最小的出来然后减掉,最后的即为答案。为什么是正确的呢?...

weixin_30670151的博客 180

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

BZOJ 2288 【POJ Challenge】生日礼物(贪心+优先队列)

【题目链接】http://www.lydsy.com/JudgeOnline/problem.php?id=2288 【题目大意】   给出一列数,求最多取m段连续的数字,使得总和最大 【题解】   首先我们对数据进行合并处理,连续的一段正数或者连续的一段负数处理成一个数字,   之后我们发现,如果正数的个数小于等于m,那么直接输出正数的总和即可,   如果...

weixin_30647065的博客 148

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

BZOJ 2288: 【POJ Challenge】生日礼物 贪心 + 堆 + 链表

好像是模拟费用流 Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define P pair<int,int> #define ll long long #define maxn 100007 using namespace ...

weixin_30347335的博客 115

BZOJ 2288: 【POJ Challenge】生日礼物 贪心,堆 BZOJ 1150强化

题意: 给出一个长度为n的数列,要求从中取出不超过m段连续的数,使其和最大。 n<=100000解题方法: 这题可以把一段同号的数并成一个数,那么就变成了一个正负交替的序列,然后把头尾的负数去掉。 有一种想法就是把所有的正值都加起来,然后把所有数的绝对值加进优先队列,每次去一个最小的出来然后减掉,最后的即为答案。 为什么是正确的呢?因为如果减去的值在原数列中为正则相当于不要这个数,否则就相

I good vegetable a! 526

BZOJ3502PA2012Tanie linie&BZOJ2288[POJ Challenge]生日礼物——模拟费用流+链表+堆

题目描述 n个数字,求不相交的总和最大的最多k个连续子序列。1<= k<= N<= 1000000。 输入 输出 样例输入 5 2 7 -3 4 -9 5 样例输出 13 根据贪心的思想可以知道对于一段连续的正数或负数一定是一起选或者一起不选,那么我们可以将原序列连续的正数或负数缩成一个数,并将中间的$0$及两端的负数去掉,这样序列...

weixin_30241919的博客 105

【BZOJ3502/2288】PA2012 Tanie linie/【POJ Challenge】生日礼物 堆+链表(模拟费用流)...

【BZOJ3502】PA2012 Tanie linie Description n个数字,求不相交的总和最大的最多k个连续子序列。1<= k<= N<= 1000000。 Sample Input 5 2 7 -3 4 -9 5 Sample Output 13 题解:跟1150和2151差不多。 我们先做一些预处理,因为连续的正数和...

aodanchui1057的博客 153

BZOJ2288:[POJ Challenge]生日礼物——题解

https://www.lydsy.com/JudgeOnline/problem.php?id=2288 ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列A1,A2, ...,AN. 她被允许选择不超过M个连续的部分作为自己的生日礼物。 自然地,ftiasch想要知道选择元素之和的最大值。你能帮助她吗? 这题很像BZOJ1150:[APIO/...

weixin_33788244的博客 306

Bzoj 2288 生日礼物题解

2288: 【POJ Challenge】生日礼物 Time Limit:10 SecMemory Limit:128 MBSubmit:856Solved:260[Submit][Status][Discuss] Description ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列A1,A2, ...,AN. 她被允许选...

weixin_33790053的博客 231

【bzoj2288】【POJ Challenge】生日礼物

Descriptionftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, …, AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物。自然地,ftiasch想要知道选择元素之和的最大值。你能帮助她吗?Input第1行,两个整数 N (1 ≤ N ≤ 105) 和 M (0 ≤ M ≤ 105), 序列的长度和可以选择的部分。第2行, N 个整数 A1,

wang_sj的博客 1291

【BZOJ2288】[POJ Challenge]生日礼物(线段树)

题目来源:BZOJ2288 如果 m=1m=1m=1 我们只需要求最大子段和即可。 但是当 m&amp;amp;amp;gt;1m&amp;amp;amp;gt;1m&amp;amp;gt;1 时,我们的选取可能会产生后效性。 比如说黄色部分是选取一个子段的最优方案,橙色部分是选取两个子段的最优答案。 那么我们需要搞一个资瓷删除部分已经选过的数的操作。 我们可以考虑直接把选出的部分取反,即区间取反操作。 然后每次需要动态维护最大子段...

changle_cyx 923

BZOJ 2288: 【POJ Challenge】生日礼物 链表+优先队列

2288: 【POJ Challenge】生日礼物Time Limit: 10 Sec Memory Limit: 128 MB Submit: 875 Solved: 267 [Submit][Status][Discuss]Descriptionftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, …, AN. 她被允许选择不超过 M 个连续的部分作为

ywq12138的博客 521

[bzoj2288][pojChallenge]生日礼物【贪心+堆+链表】

题目描述 ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, …, AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物。 自然地,ftiasch想要知道选择元素之和的最大值。你能帮助她吗? 分析 这道题目还是非常简单的,和数据备份几乎是一样的,吐槽完毕。 参照之前我们的思路,因为是m段不同的部分,那么很明显,一段全是同一符号的一定是一起被...

weixin_30483697的博客 257
上一篇: [poj1190][搜索]生日蛋糕
下一篇: [poj3696][数论]The Luckiest number
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值