cf1526 C Potions

cf1526 C Potions

题意:

n个药剂,每个药剂可以加/减能量,一开始能量为0,从左往右开始进行,全程能量不为负,问最多可以使用几个药剂
本题有简单(n<2000),困难模式(n≤200000)

题解:

简单题解:

第一反应肯定是dp
设dp[i][j]为前i个药吃了j个,获得的最大能量
dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]+a[i])
求完dp后
倒着循环找第一个大于0等dp[n][i]就是答案
代码为状态压缩成一维的

困难题解:

当n<=200000时,dp就会超时
我们现在认为存在后悔情况,对于当前第i个药,如果我吃下去后啥事没有(能量非负),就看下一个药。如果吃完能量为负,为了让我们吃药的数量尽可能多,我们开始反悔,我们把之前吃过的毒药(会减能量的药)和当前做比较,这里我们可以用一个最小堆来维护之前吃过的毒药,此时堆顶为吃过的毒药中减的最多的,如果当前药比堆定大(也就是减的少,因为是负数),那我们就把堆顶,这个吃过的药,吐出来(能量加回去),吃下新的毒药(减当前的毒药)

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;
//qdu打铁匠
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
priority_queue<int,vector<int>,greater<int> >q;
int main()
{int n;n=read();int tot=0; ll ph=0;for(int i=1;i<=n;i++){int x=read();if(x>=0){tot++;ph+=x;}else {if(ph+x>=0){ph+=x;q.push(x);tot++;}else {if(!q.empty()&&x>q.top()){ph-=q.top();q.pop();q.push(x);ph+=x;}}}}cout<<tot;
}

简单代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;
//qdu打铁匠
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int INF=0x3f3f3f3f;
const int maxn=3e3+9;
int a[maxn]; 
ll dp[maxn];
int w[maxn];
int main()
{int n=read();for(int i=1;i<=n;i++){cin>>a[i];}memset(dp,-INF,sizeof(dp));dp[0]=0;for(int i=1;i<=n;i++){for(int j=i;j>0;j--){if(dp[j-1]+a[i]>=0){dp[j]=max(dp[j],dp[j-1]+a[i]);}}}for(int i=n;i>=0;i--){if(dp[i]>=0){cout<<i<<endl;return 0; }}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[CF 526 F] Pudding Monsters(单调栈 + 线段树)

CF526F Pudding Monstersproblemsolutioncodeproblem luogu翻译 solution observation &#xff1a;每行每列恰好有一个棋子&#xff0c;所以如果一段区间 [l,r][l,r][l,r] 会被某个 kkk 统计&#xff0c;当且仅当这个区间内棋子纵坐标 ymax−ymin1r−l1y_{max}-y_{min}1r-l…

微信开发必看,使用.Net Core 开发微信跨平台应用

.NET Core 是一个开源通用的开发框架&#xff0c;源码由微软官方和社区共同支持。支持跨平台&#xff0c;即支持在 Window&#xff0c;macOS&#xff0c;Linux 等系统上的开发和部署&#xff0c;并且可以在硬件设备&#xff0c;云服务&#xff0c;和嵌入式/物联网方案中进行使用…

P5590 赛车游戏(差分约束)

前言 9月做的题现在不会了&#xff1f;&#xff1f;&#xff1f; 越学越拉了属于是。 解析 设 disxdis_xdisx​ 表示 1-x 的最小距离&#xff0c;那么一条 u->v 的边的边权就是 disv−disudis_v-dis_udisv​−disu​。 差分约束即可。 挂掉的坑点&#xff1a;只需要考虑…

CF1526 D. Kill Anton

CF1526 D. Kill Anton 题意&#xff1a; 给你一个由’A’,‘N’.‘T’,O’四个字符组成的字符串b&#xff0c;现在要求你改变b的顺序得到a&#xff0c;使得a通过移动回到b的步数最多。 每次移动只能移动相邻两项 题解&#xff1a; 官方题解说&#xff1a;最佳情况为相同字符…

[luogu P4198] 楼房重建(线段树 + 思维)

luogu 楼房重建problemsolutioncodeproblem 洛谷链接 solution 非常巧妙的一道题&#xff0c;对线段树的运用很灵活。 显然这个与原点的连线可以想到将每个点转化为与原点连线形成的直线斜率。 答案其实就是&#xff1a;从第一个点开始选&#xff0c;后一个斜率比前面大的…

模板:P6114 【模板】Lyndon 分解Runs(字符串)

你不会连跑步都不会吧。 &#xff08;逃 前言 SAM&#xff1a;runs&#xff1f;那我run了。 比 SAM 看起来层次更高的奥妙算法。 理论证明比较复杂&#xff0c;但板子写起来都比较简单。 本文会略过很多的证明。 Lyndon 分解 Definition&#xff1a; 如果一个串本身比它的所…

ASP.NET Core 3.0预览版体验

目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3&#xff0c;对应ASP.NET Core 3.0 Preview 3。ASP.NET Core 3.0 之后将不再支持.NET Framework&#xff0c;只运行在.NET Core 上面。ASP.NET Core 3.0 现在已经出到了第三个预览版&#xff0c;增加和改进了很多功能。环境准…

【无码专区13】最小公倍数(线段树)

因为只有std&#xff0c;没有自我实现&#xff0c;所以是无码专区 主要是为了训练思维能力 my idea顾名思义&#xff0c;记录了我的整个思维过程&#xff0c;以及自己部分实现细节口胡&#xff0c;还有期望分数 solution才是dls正解&#xff0c;但是因为只有潦草几句&#x…

2021牛客暑期多校训练营2

2021牛客暑期多校训练营2 题号题目知识点AArithmetic ProgressionBCannonCDraw GridsDEr Ba GameEGas StationFGirlfriendGLeague of LegendsHOlefinIPenguinsbfsJProduct of GCDsKStackLWeChat Walk

P6772 [NOI2020] 美食家(矩阵快速幂)

前言 无能狂怒。 见过甚至写过博客的trick&#xff0c;但就是想不起来了。 解析 做法1 设 ft,xf_{t,x}ft,x​ 表示 t 时刻在 x 的最大价值。 直接转移即可&#xff0c;时间复杂度 O(T(nm))O(T(nm))O(T(nm))&#xff0c;期望得分 40 分。 结合无脑转圈的 A 性质&#xff0c;…

C# .net 中 Timeout 的处理及遇到的问题

C# 中 Timeout 的处理前言最近在项目中要实现一个功能&#xff0c;是关于 Timeout 的&#xff0c;主要是要在要在 TCP 连接建立的时间 和 整个请求完成的时间&#xff0c;在这两个时间层面上&#xff0c;如果超出了设置的时间&#xff0c;就抛出异常&#xff0c;程序中断。研究…

[CodeJam 2019 Round 3] Rancake Pyramid(笛卡尔树)

CodeJam 2019 Round 3 Rancake Pyramidproblemsolutioncodeproblem 神奈子是个很爱打麻将的老婆婆&#xff0c;有一天她把她的麻将放成了 nnn 堆&#xff0c;第 iii 堆的高度为 aia_iai​ 。 因为她很喜欢风&#xff0c;所以她用风吹倒了最左边的 LLL 堆麻将和最右边的 RRR 堆…

Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2)

Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 Div. 2) 题号题目知识点ADigits Sum签到BReverse String思维CPenalty思维DBackspace逆向思维EPermutation Shift置换群FPairwise ModuloGCommon Divisor GraphHXOR and DistanceIStairs cf15…

模板:全局平衡二叉树

所谓全局平衡二叉树&#xff0c;就是在全局来看都很平衡的二叉树。 &#xff08;逃 前言 这个引言倒是实话&#xff08;雾 可以把一些本来只能用树剖两个 log 做的问题在单log 时间复杂度解决。 修改通常来说只能支持单点修改。 查询解决链上问题或者全局问题更为方便&#x…

[CodeJam 2021 Round 3] Square Free(调整法 / 字典序最小解网络流)

CodeJam 2021 Round3 Square Freeproblemsolutioncodecode-stdproblem 神奈子是个很爱打麻将的老婆婆&#xff0c;有一天她把她的麻将放进了一个 nmn\times mnm 的网格图里&#xff0c;每个麻将可以左斜着放入网格中&#xff08;如 / &#xff09;&#xff0c;也可以右斜着&am…

P6773 [NOI2020] 命运(dp、线段树合并)

前言 一道看起来很毒瘤但其实还算小清新的题&#xff1f; 理解后感觉其实并没有那么难。 暴力分非常足&#xff0c;好评。 奇妙的线段树合并技巧增加了。 解析 解法1 你是怎么手玩的样例一&#xff1f; 大部分&#xff08;比如我&#xff09;都是容斥吧。 把手玩的方法搬到…

ConsurrentDictionary并发字典知多少?

在上一篇文章你真的了解字典吗?一文中我介绍了Hash Function和字典的工作的基本原理.有网友在文章底部评论,说我的Remove和Add方法没有考虑线程安全问题.https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?redirectedfromMSDN&viewn…

[luogu 4292][bzoj 1758][WC2010] 重建计划(点分治 + dp + 单调队列优化 + 启发式合并)

[WC2010]重建计划problemsolutioncodeproblem 洛谷指路 solution 一看那个道路平均价值的式子&#xff1a;AvgValue∑e∈Sv(e)∣S∣\text{AvgValue}\frac{\sum_{e\in S}v(e)}{|S|}AvgValue∣S∣∑e∈S​v(e)​ 就是 0/1分数规划 的样子。 所以考虑二分最终的答案 midmidmid…

cf1553C. Penalty

cf1553C. Penalty 题意&#xff1a; 有十轮点球&#xff0c;两个队伍轮流进行&#xff0c;1表示进&#xff0c;0表示不进&#xff0c;&#xff1f;表示未知&#xff0c;如果比赛没有了悬念将直接结束。现在让你预测一个情况&#xff0c;使得进行的轮数最少。裁判在决定停止点…

ASP.NET Core 基于JWT的认证(二)

上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍&#xff0c;这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用。.Net Core 2.2Visual Studio 2017ASP.NET Core WebAPI2在上一篇文章中&#xff0c;我们详细的介绍了JWT的知识&#xff0c;这…