CodeForces - 1526C2 - Potions (Hard Version) ( 优先队列 + 贪心 )

Codeforces Round #723 (Div. 2) C2. Potions (Hard Version) (贪心、dp、数据结构) 题目链接:https://codeforces.com/contest/1526/problem/C2 题目大意: 从左到右有杯酒,每杯酒有一个健康值,喝掉一杯酒后,人的健康值会加。初始的时候人的健康值为0,在最左边的酒,从左到右往后喝,对于一杯酒可以选择喝和不喝,人的健康值在整个过程不能小于0,求最多可以喝几杯酒? 题解: 方法1:dp 表示前杯酒喝了杯最大的健康值 这种方法复杂度 个人的解法:贪心 若当前酒健康值为-4且能喝,后面有杯健康值为-1,那么显然后面这杯健康值为-1的酒是. 阅读详情
题目链接:点击进入
题目

在这里插入图片描述

题意

n 个瓶子,每个瓶子都有价值( 有正有负,正的加血,负的减血 ),初始生命值 0 ,问在保证过程中血量不小于 0 的情况下,最多可以选择多少个瓶子( 每个瓶子可以选择也可以不选择 )

思路

对于价值为正的瓶子,我们肯定选择,若瓶子的价值为负:
若我们喝下去生命值不会变为负数,我们选择喝下去。
若我们喝下去生命值会变为负数,那么我们将此时的这瓶水,与之前喝过的、价值为负数的 且 价值最低的瓶子做比较,
若此时的价值更低,那么我们不选择这个瓶子;
若此时价值更高,那么我们选择这瓶,将之前选择的用来做对比的那瓶水抛弃掉(不喝)
所以,我们需要用一个 优先队列 来维护之前喝过的、价值为负数的、价值最低的瓶子价值。
剩下的就是贪心统计答案了。

代码
// #pragma GCC optimize("Ofast","inline","-ffast-math")
// #pragma GCC target("avx,sse2,sse3,sse4,mmx")
//#pragma GCC optimize(3)//O3
//#pragma GCC optimize(2)//O2
//#include<bits/stdc++.h>
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<bitset>
#include<fstream>
#define X first
#define Y second
#define best 131 
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define lowbit(x) x & -x
#define inf 0x3f3f3f3f
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
#define int long long
//#define double long double
//#ifndef ONLINE_JUDGE  freopen("data.in.txt","r",stdin);
//freopen("data.out.txt","w",stdout); #endif //Îļþ¶ÁÈ¡ 
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pai=acos(-1.0);
const int Mod=998244353;
const double eps=1e-9;
const int N=26;
const int mod=51123987;
const int maxn=1e6+10;

/*--------------------------------------------*/ 
inline int read()
{
    int data=0,w=1; char ch=0;
    while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar();
    if(ch=='-') w=-1,ch=getchar();
    while(ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar();
    return data*w;
}
/*--------------------------------------------*/

int t,n,m,a[maxn],x;
string s;
priority_queue<int,vector<int>,greater<int>>q;

signed main()																						
{	
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	int sum=0,ans=0;
	for(int i=1;i<=n;i++)
	{
		if(a[i]>=0) sum+=a[i],ans++;
		else if(sum+a[i]>=0)
		{
			ans++;
			sum+=a[i];
			q.push(a[i]);
		}
		else
		{
			if(q.size()&&q.top()<a[i])
			{
				sum-=q.top();
				q.pop();
				sum+=a[i];
				q.push(a[i]);
			}
		}
	} 
	cout<<ans<<endl;
	return 0;
}
ConvNeXt 改进 :ConvNeXt添加GnConv递归门控卷积,二次创新CNBlock结构 ,独家首发 视觉 Transformer 在多种任务中取得了显著的成功,这得益于基于点积自注意力的新空间建模机制。视觉 Transformer 中的关键因素——即输入自适应、长距离和高阶空间交互——也可以通过卷积框架高效实现。作者提出了递归门控卷积(Recursive Gated Convolution,简称 gnConv),通过门控卷积和递归设计执行高阶空间交互。该新操作具有高度的灵活性和可定制性,兼容各种卷积变体,并将自注意力中的二阶交互扩展到任意阶数,而不会引入显著的额外计算。 阅读详情

相关推荐

自适应动态规划硕士博士论文学习

强化学习关注随机过程中的序贯决策问题,而自适应动态规划关注动态系统的控制问题。吸引域:系统渐近稳定的区域。

DarlingLSA的博客 1425

湖北2022省赛C. Potion(hard version),推结论

将ab变成1g,发现答案必定是(1+g)的次方,并且独立起来每个(1+g)进制下都有且只能有一个g。如果b>=a,则(a+b)进制满足第i项大于前面所有项之和,检查x,y不断减去大的一个即可。如果b

qq_51268115的博客 797

COLMAP在Ubuntu下的编译陷阱与实战避坑指南——从环境配置到三维重建全流程

本文详细介绍了在Ubuntu系统下编译和配置COLMAP三维重建工具的全流程,包括环境准备、依赖库安装、CUDA加速配置以及常见编译问题的解决方案。通过实战案例演示了从图像特征提取到稠密重建的完整步骤,并提供了性能优化和问题排查的实用技巧,帮助用户高效完成三维重建任务。

weixin_29003437的博客 1048

C2. Potions (Hard Version)(可以后悔的选取 + 一种新奇的优先队列用法)

有n个药水排成一行,最左边是药水1,最右边是药水n。ai可以是负数,这意味着该药水会减少你的健康状况。你开始时健康状况为0,你将从左到右,从第一个药水走到最后一个。在这个例子中,你可以通过服用药水1、3、4、5和6喝下5瓶药水。不可能喝完所有的6种药水,因为你的健康状况会在某一时刻变成负数。唯一不同的是,在这个版本中,n≤200000。下一行包含n个整数a1, a2, .... ,an (-109≤ai≤109),代表喝完药水后的健康变化。输出一个整数,即你能喝的最大药水数量,而你的健康状况不会变成负数。

m0_64158084的博客 828

@transactional滥用导致数据源连接池耗尽问题

@transactional滥用导致数据源连接池耗尽问题

qq_43205267的博客 1200

OceanBase数据库LSM-Tree存储引擎深度解析:合并写入与压缩优化策略

OceanBase数据库采用创新的LSM-Tree架构设计,通过"基线-增量"分离存储实现高性能。内存中的MemTable处理写入,磁盘上的SSTable存储有序数据,利用多级缓存加速读取。写入时先写日志再更新内存,合并操作将增量数据整合为基线数据以优化查询性能。相比传统B+树引擎,OceanBase在写入吞吐、压缩效率和存储成本方面优势显著,特别适合写入密集型场景。合并操作作为核心机制,通过多种触发方式和执行策略平衡性能与资源消耗。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1341

C2. Potions (Hard Version)

cf E

m0_62167326的博客 354

企业数据治理体系中的AI与业务融合:架构师的3个成功案例

企业数据治理的痛点从来不是“有没有做”,而是“做了之后有没有用”——很多企业花了数百万建数据仓库、做元数据管理,最后却陷入“数据躺在库里睡大觉”“AI模型因数据质量差而失效”的困境。本文通过零售、金融、制造3个真实案例,拆解架构师如何用AI连接数据治理与业务场景:从“客户画像不准”到“精准推荐提升30%转化率”,从“欺诈检测漏报”到“实时拦截减少50%损失”,从“库存积压”到“供应链周转率提升20%”。如何让数据治理从「合规驱动」转向「价值驱动」?

AI 原生应用开发的博客 992

Codeforces Round #723 (Div. 2)C2. Potions (Hard Version)

Codeforces Round #723 (Div. 2)C2. Potions (Hard Version)

m0_74113129的博客 243

使用conda环境python3.13和python3.12下安装vllm过程记录

使用conda环境python3.13和python3.12下安装vllm过程记录

没刮胡子的程序员专栏 885

k230 +canMV+ LVGL控件 仿手表表盘触摸屏滚动、选中后弹窗效果完整示例程序

现在智能手表用的越来越多,其交互方式比较有特点,现在k230开发板上,基于LVGL(Light and Versatile Graphics Library)编写一个嵌入式GUI应用程序,使用LVGL配合触摸屏实现模仿智能手表的表盘滚动效果,实际效果如下:程序使用LVGL图形库和MediaManager程序,创建带有触摸屏交互的GUI应用。程序主要功能包括显示初始化、LVGL初始化、创建GUI界面(包含一个可滚动的按钮列表,每个按钮点击会弹出消息框),以及处理触摸屏输入。

weixin_47446386的博客 1175

Codeforces Round #723 (Div. 2) C2. Potions (Hard Version)

所以我们可以得到什么,按顺序走,如果前边的路过没有喝,那么就不能再喝,所以我们无法确定喝还是不喝,非负数肯定全喝,然后在负数中 喝大的和小的一样,所以我们对这个性质便可以有所操作,我们前边能喝就喝,然后使用优先队列小顶堆,如果喝不下了,就把负的最小的扔出去,再喝当前负的较小的,这样反复,到最后就是最优的。那么这肯定是一道奇妙思维题,我们根据题目可以得到以下:可以喝或不喝 从左到右走 喝的最大的数量。对于每一剂药剂,你可以选择喝或忽略它。输出一个整数,即在你的生命值为负的情况下,你可以喝的药水的最大数量。

ACMer未入门热爱者 298

手把手教你学Simulink——基于AI融合与智能调度的场实例:强化学习在卫星资源分配中的应用

本文详细介绍了如何利用Simulink和强化学习技术实现智能卫星资源分配。文章首先分析了低轨卫星通信系统面临的动态资源调度挑战,提出采用强化学习(特别是PPO算法)的解决方案。接着逐步展示了完整的建模过程:从Simulink项目创建、卫星通信环境建模(用户业务、信道特性、资源池),到强化学习任务定义(状态空间、动作空间、奖励函数),再到PPO智能体的构建与训练。最后通过仿真验证,PPO智能体在系统吞吐量、公平性和阻塞率等关键指标上均优于传统方法。该方案为卫星通信系统的智能资源管理提供了可行方案,并支持进一步

MHD0815的博客 190

CodeForces - 1526C2 Potions (Hard Version)(优先队列 贪心)

LINK 题意:给出n个药水,初始生命为0,问在生命值为非负数的情况下最多可以喝多少瓶药水 分析:药水按顺序喝,如果为整数就加到当前生命值中,如果为负数就放入优先队列,当生命值为负的时候,加上优先队列中第一个的绝对值,数量-1 相当于反悔了,每次都反悔喝过之前的负数最大的 AC代码: #include<bits/stdc++.h> #include<queue> using namespace std; typedef long long ll; int a[200010]; int

大聪明的博客 499

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

codeforces 1526 C1. C2. Potions (Easy and Hard Version)(1500,1600,带悔贪心,优先队列)

链接: https://codeforces.com/problemset/problem/1526/C1 https://codeforces.com/problemset/problem/1526/C2 题意: 按顺序从左往右嗑药,保证hp>=0,尽可能嗑最多的药; 题解: 加HP的药一定要喝,扣HP的先喝,但要用个东西(优先队列)存起来,等把HP喝成复数时,把扣的最狠的那瓶药吐出来; 题解: #include<bits/stdc++.h> using name..

m0_55858144的博客 393

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Codeforces 1526C - Potions (Easy and Hard Version)(带悔贪心)

Potions time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output This is the hard version of the problem. The only difference is that in this version n≤200000. You can make hacks only if both versions of the

在读NLP硕士 1078

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

1600*C2. Potions (Hard Version)(贪心&优先队列)

【代码】1600*C2. Potions (Hard Version)(贪心&优先队列)

陈进士学习的博客 114

Codeforces Round 723 (Div. 2) C2. Potions (Hard Version)

当碰到负数时,如果加上这个负数,我们的值仍然是非负数,那么本着贪心的原则,能贪则贪,我们就选择这个。对于这道题就是当我们遇上加上这个数是负数时,如果之前有比这个数更小的负数,我们就删去之前更小的那个负数,选择这个数。反悔贪心也就是指我当前阶段觉得这个可以贪,那我就贪,但当我走到下一个阶段发现贪当前这个远胜于贪之前那个的时候就反悔,不再要之前贪的那个了,俗称“渣男”。题意:给定长度为n的数组,每个元素可选择要或者不要,初始值为0,要求在保证得到的值始终不为负的情况下,能选择的最多的个数。

weixin_50089904的博客 513

C2. Potions (Hard Version)—— Codeforces Round #723 (Div. 2)

https://codeforces.com/contest/1526/problem/C2 超级无敌可爱的eke老师: 逸珂 0:35:47 我是维护了一个优先队列 逸珂 0:36:17 记录队列元素的分数和 逸珂 0:36:36 如果和小于0了,就把队列里面最小的数pop掉,直到不为负 逸珂 0:36:51 然后用队列长度更新答案 出尘 0:37:13 嗯 逸珂 0:37:40 其实我因为C1用了dp,C2也老想着dp 出尘 0:37:58 嗯嗯 出尘 0:37:59 我也是 出尘 0:38:11 还想

出尘的博客 299

Potions (Hard Version)

就是一路上我一直吃药,但是要保证吃完药我的健康值是正的,不能小于0,贪心+优先队列,我们想让自己健康值累加大,那么就要保证尽量去吃小负数的药瓶,因为减去越少,后面我们能吃的药越多(就是吃~,良药苦口~)。

m0_67717626的博客 505

cf 723 C2. Potions (Hard Version)(反悔,priority)

传送门 难过,就差一点点…… 大致翻译: 这是问题的硬版本。唯一的区别是在这个版本中≤20万。只有两个版本的问题都解决了,你才能进行黑客攻击。 一行有n种药剂,药剂1在最左边,药剂n在最右边。每一种药剂都会增加你的生命值。ai可以是负的,意味着药剂会降低生命值。 你从0点生命值开始,从左到右,从第一个魔药到最后一个魔药。在每一个药水,你可以选择喝它或忽略它。你必须确保你的健康永远是非负的。 你能喝的药水最多是多少? 输入 第一行包含一个整数n(1)≤n≤200000)-药剂的数量。 下一行包含n个整数a1,

木静音yy的博客 614

Potions (Easy Version) CodeForces - 1526C1(优先队列)

先讲一下优先队列: top 访问队头元素 empty 判断队列是否为空 size 返回队列内元素个数 push 插入元素到队尾 (并排序) pop 弹出队头元素 swap 交换内容 升序和降序优先队列: 升序队列 priority_queue <int,vector,greater > q; 降序队列 priority_queue <int,vector,less >q; 题目链接:https://vjudge.z180.cn/problem/CodeForces-1526C1

Lily的博客 755

Codeforces Round #723 (Div. 2) C2. Potions (决策反悔)

题意: 给出一个数组a,一开始生命值为0,然后从1至n依次决定生命值是否加上a[i]a[i]a[i] ,要保证在这个过程中生命值不能为负数,求最多能加多少个数。 题解: 感觉还是挺妙的一个题。 当遇到≥0\geq0≥0 的数,肯定是要选的。 当遇到负数,假如加上去生命值不为负,我们可以先将其加上去,并将其放入到优先队列中。假如加上去生命值为负数,那么就得考虑是否可以去掉前面已选的一个负数然后加上这个数。这就是优先队列的作用,我们取队列里最小的值和当前的数比较,如果当前数大,那么此时就可以反悔,不要前面的那个

the best 的博客 193

C1. Potions (Easy Version) (Hard Version)

https://codeforces.com/contest/1526/problem/C1 input 6 4 -4 1 -3 1 -3 output 5 题意:给n,然后n个数列,从左到右取,对于每个数可取可不取,过程不能小于0,最后求 max的取得数 思路:优先队列yyds(绝对不是 蒟蒻不会dp) sum大于零就放回队列 每次小于0的时候就把已取得的数中最小的丢掉,使得数列回归正数, 当sum小于0时候:先放入一个再丢掉一个最小的,取得的数量不变,sum只会大于或等于原本,即不会亏本(这句不好理解

一个不爱打cf的acmer吧 738

Potions (Hard Version) CodeForces - 1526C2

题意 给出n个试剂 要求从左到右喝试剂,要求每时每刻的生命值都是正的,求喝的最大数量 Input 6 4 -4 1 -3 1 -3 Output 5 用一个优先队列存储走过能量为负的试剂,当生命值为负数的时候,就将负能量最大的试剂弹出,最后剩下的加上正能量的试剂数即答案 #include <stdio.h> #include <string.h> #include <algorithm> #include<bits/stdc++.h> using name

RUBGH的博客 503

C1. Potions (Easy Version)/(Hard Version)(后悔构造 + 堆)

C1. Potions (Easy Version)/(Hard Version) 题目大意: 给定一串饮品,你的初始健康值为0,喝下对应饮品后会使得你的健康值改变,对于每个饮品你都可以选择喝或者不喝,请问在健康值不为负数的情况下,最多喝几个饮品。 思路: 首先,如果饮品的健康值为正数时,那我们肯定是要喝的。 其次,当饮品的健康值为负数时,如果当前健康值减去该健康值不小于0的话,我们也喝下他,但是同时,我们要将他记入到一个小根堆中,方便我们以后进行后悔。 当我们的健康值减去对应饮品的健康值后,小于0,那么

lucifer1214的博客 574
上一篇: CodeForces - 1523B - Lord of the Values ( 思维 )
下一篇: P1273 有线电视网 ( 树形dp -分组背包 )
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值