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; }}
}

cf1526 C Potions相关推荐

  1. CF1526 D. Kill Anton

    CF1526 D. Kill Anton 题意: 给你一个由'A','N'.'T','O'四个字符组成的字符串b,现在要求你改变b的顺序得到a,使得a通过移动回到b的步数最多. 每次移动只能移动相邻两 ...

  2. CF1526C2 Potions (Hard Version) (贪心 + 线段树)

    题目链接: Potions (Hard Version) 大致题意 有n个数, 编号从1~n, 第i个位置的值为a[i]. 从编号为1的数字开始选择, 一直到编号为n的数字. 对于第i个数字, 你可以 ...

  3. Potions CodeForces - 1526C1/1526C2(优先队列)

    Potions(Easy Version) Potions(Hard Version) 题意: 从左往右喝药,在保证自己的生命值hp>0的情况下,尽可能喝更多的药 思路: 碰到加hp的,就可以喝 ...

  4. Codeforces Problem 717C Potions Homework(排序)

    此文章可以使用目录功能哟↑(点击上方[+]) 比赛链接→Bubble Cup 9 - Finals [Online Mirror]  Codeforces Problem 717C Potions H ...

  5. C. Anton and Making Potions 贪心 + 二分

    http://codeforces.com/contest/734/problem/C 因为有两种操作,那么可以这样考虑, 1.都不执行,就是开始的答案是n * x 2.先执行第一个操作,然后就会得到 ...

  6. codeforces 1526C1 Potions (Easy Version)

    链接: https://codeforces.com/problemset/problem/1526/C1 题意: 有n瓶药水,从1到n,每瓶药水可以为你回复a[i]点血,a[i]也可以是负的,必须按 ...

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

    传送门 难过,就差一点点-- 大致翻译: 这是问题的硬版本.唯一的区别是在这个版本中≤20万.只有两个版本的问题都解决了,你才能进行黑客攻击. 一行有n种药剂,药剂1在最左边,药剂n在最右边.每一种药 ...

  8. Magic Potions

    题目描述: 一堆东西,每次拿出两个不同的东西合.要最终合出来的最多.并且要贪心的买12 13 14...1n 23... http://codeforces.com/gym/100430/attach ...

  9. (转)upper_bound()与lower_bound()使用方法

    1 2 3 4 5 6 7 8 9 10 11 12 13 #include<iostream> #include<algorithm>//必须包含的头文件 #include& ...

最新文章

  1. 神器与经典--sp_helpIndex
  2. SQLServer 常见高CPU利用率原因
  3. ipc620中文版最新版本_(一)Windows10 家庭中文版Docker安装 搭建docker开发环境
  4. python多线程的两种写法
  5. compare two oracle database schemas
  6. Linux中的动态链接库与静态链接库
  7. Eclipse 答疑:为什么在 Eclipse 中,运行本程序却是另外一个程序的结果?
  8. Window Services的调试和非托管dll的引用及其他一些注意问题
  9. XML:DTD:Schema
  10. 春运车票为谁“秒空”?第三方软件的困与危
  11. big sur支持机型_小米10 Pro官方下架:高端在售机型只剩它
  12. android for循环比大小,如何让for()循环花费更少的时间(android)?
  13. 用Python学《微积分B》(Fourier级数)
  14. 小爱同学app安卓版_小爱同学APK提取版-小爱同学APP最新版下载5.15.10安卓版-玩友游戏网...
  15. selenium之 富文本框和editor编辑器的处理
  16. laravel详情页
  17. php and mysql登录注册页面
  18. 企业财务管理信息化现状思考与探索
  19. 在计算机语言中go是什么意思,golang中的断言是什么意思
  20. 只会Python可造不出iPhone

热门文章

  1. 直男的回答能多出乎意料?
  2. 内核中根据inode得到文件名_聊聊DOS操作系统中的文件系统FAT12
  3. linux at java,Linux-Tutorial/Java-bin.md at master · linsanityHuang/Linux-Tutorial · GitHub
  4. html 表格 左侧表头,左侧是表头的JS表格控件(自写,网上没有的)
  5. 刷新mac地址命令_配置好Cisco交换机需要熟悉IOS命令及相关的知识
  6. liunx+java+jar+运行_Linux后台运行java的jar包
  7. mysql innodb 多线程插入_mysql innodb 并发插入问题,包大量死锁错误
  8. 算法设计与分析——递归与分治策略——最接近点对问题
  9. 「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
  10. IDEA如何在包下建立子包