题面

题意

给你一个长度为n的序列a,你的初始生命值为0,你可以选择加上ai,但前提是保证在任何时刻生命值不小于0. 求最多能加多少个值。C1版本的的n为2000,C2版本的n为20000

C1题解

C1的n只有2000,可以直接用dp来做,f[i] [j] 表示在前 i 瓶中选择了 j 瓶的最大价值,就可以由 max ( f[i-1] [j] , f[i-1] [j] +a[i] ) 得到

C1代码

#include<bits/stdc++.h>using namespace std;
typedef long long ll;
const int N = 2005;
const ll INF = 1e15;int n;
ll a[N];
ll f[N][N];  //在前 i 瓶种选择了 j 瓶的最大价值int main() {cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];for (int i = 1; i <= n; i++) {for (int j = 1; j < i; j++) {f[i][j] = max(f[i - 1][j - 1] + a[i], f[i - 1][j]);if (f[i][j] < 0) f[i][j] = -INF;   //小于0直接赋值无穷大,防止下次更新为正数}f[i][i] = f[i - 1][i - 1] + a[i];if (f[i][i] < 0) f[i][i] = -INF;}int res = 0;for (int i = 0; i <= n; i++) {if (f[n][i] >= 0) res = i;}cout << res << endl;return 0;
}

C2题解

c2版本的n为20000,dp会超时,考虑贪心,我们用一个小根堆来维护已经选的值,当加入一个值使得总和小于0,那么就删去堆顶元素,直到值不小于0,每次取堆的长度就是所能选的最大长度

C2代码

#include<bits/stdc++.h>using namespace std;
typedef long long ll;
const int N = 2e5 + 10;ll n;
ll a[N];int main() {cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];priority_queue<int, vector<int>, greater<int>> p;int ans = 0;ll sum = 0;for (int i = 1; i <= n; i++) {p.push(a[i]);sum += a[i];while (sum < 0) {sum -= p.top();p.pop();}ans = max(ans, (int) p.size());}cout << ans << endl;return 0;
}

codeforces 1526 C相关推荐

  1. CodeForces - 1526D Kill Anton(模拟)

    题目链接:https://vjudge.net/problem/CodeForces-1526D 题目大意:给出一个只有四种字母组成的字符串 AAA,要求将其重排列 BBB,使得贡献最大.贡献指的是, ...

  2. Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力

    传送门 文章目录 题意: 思路: 题意: 给你一个只有ANTOANTOANTO四个字母的字符串,你每次可以交换相邻两个,花费为111,让后让你打乱字符串,使得将打乱的字符串还原为原来的字符串的花费最小 ...

  3. codeforces 1526B I Hate 1111

    链接: https://codeforces.com/problemset/problem/1526/B 题意: 判断x能不能被11,111,1111.....组成. 本题,除了11和111以外,其他 ...

  4. codeforces 1526C1 Potions (Easy Version)

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

  5. 51nod 1526 分配笔名(字典树)

    1526 分配笔名 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题  收藏  关注 班里有n个同学.老师为他们选了n个笔名.现在 ...

  6. codeforces 有意思的思维题 1 ~ 15

    codeforces 思维题 1.给定数组,求满足i < j and ai * aj = i + j的数对数量 2.第 i 步向前跳 i 步或后退 1 步 3.给两个点,求正方形的另两个点 4. ...

  7. Codeforces Round #723 (Div. 2) 个人题解

    上1400辣! 传送门:https://codeforces.com/contest/1526 A. Mean Inequality 题意 给一个长度为偶数的数组,你需要重排这个数组,使得任意一个数不 ...

  8. 51Nod 1526 分配 笔名

    1526 分配 笔名 题目来源:  CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320  难度:7级算法题  收藏  关注 班里有n个同学.老师为他们选了n个笔名 ...

  9. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

最新文章

  1. 【CTF】实验吧 The Flash-14
  2. Linux笔记(更改权限chmod,更改所有组chown,umask,隐藏权限chattr)
  3. linux synproxy 抵御 ddos攻击的原理和优化
  4. 快讯|工业大数据产业发展联盟成立,助力我国产业生态集聚
  5. 博客作业03--栈和队列
  6. 一个XOR问题的实例---神经网络的权重到底是如何变化的
  7. 清理 zabbix 历史数据, 缩减 mysql 空间
  8. Java 开发人员 2019 生态系统信息图
  9. 苹果新的编程语言 Swift 语言进阶(一)--综述
  10. ubuntu中flashcache使用教程
  11. 荣耀V40 Pro全新外观曝光:熟悉的矩阵镜头造型
  12. 【数据分析】脑图简介数据处理
  13. ethtool 命令输出的注意点--网卡参数
  14. python3 主函数_Python3---常见函数---if __name__ == __main__
  15. logitech鼠标接收器配对
  16. C++对象数组 —— 学生信息表
  17. 【Redis 开发与运维】初识 Redis
  18. mix2线刷开发板救砖_小米MIX2线刷刷机教程_小米MIX2第三方rom包_线刷救砖教程
  19. 我的世界java作弊怎么开_我的世界怎么开作弊?如何启用作弊模式?
  20. 如何删除MySQL服务

热门文章

  1. Spark 用代码实现求分位数Percentile(Quentile)的方法
  2. SpringMVC 学谈 (第二章)
  3. Python统计字符串中出现次数最多的人名
  4. 全院级pacs系统中前置服务器,PACS系统性能优化的实施与体会——蒋昆 李哲 赵海涛...
  5. C语言学习(十)C语言中的小数
  6. Java变量概述与使用
  7. 简单易懂的英语学习思维导图(学习篇)
  8. WordPress模板教程
  9. 十一黄金周旅游线路排行榜(图文)
  10. 审阅模式中word保存不了