codeforces 1526 C
题面
题意
给你一个长度为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相关推荐
- CodeForces - 1526D Kill Anton(模拟)
题目链接:https://vjudge.net/problem/CodeForces-1526D 题目大意:给出一个只有四种字母组成的字符串 AAA,要求将其重排列 BBB,使得贡献最大.贡献指的是, ...
- Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力
传送门 文章目录 题意: 思路: 题意: 给你一个只有ANTOANTOANTO四个字母的字符串,你每次可以交换相邻两个,花费为111,让后让你打乱字符串,使得将打乱的字符串还原为原来的字符串的花费最小 ...
- codeforces 1526B I Hate 1111
链接: https://codeforces.com/problemset/problem/1526/B 题意: 判断x能不能被11,111,1111.....组成. 本题,除了11和111以外,其他 ...
- codeforces 1526C1 Potions (Easy Version)
链接: https://codeforces.com/problemset/problem/1526/C1 题意: 有n瓶药水,从1到n,每瓶药水可以为你回复a[i]点血,a[i]也可以是负的,必须按 ...
- 51nod 1526 分配笔名(字典树)
1526 分配笔名 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 班里有n个同学.老师为他们选了n个笔名.现在 ...
- codeforces 有意思的思维题 1 ~ 15
codeforces 思维题 1.给定数组,求满足i < j and ai * aj = i + j的数对数量 2.第 i 步向前跳 i 步或后退 1 步 3.给两个点,求正方形的另两个点 4. ...
- Codeforces Round #723 (Div. 2) 个人题解
上1400辣! 传送门:https://codeforces.com/contest/1526 A. Mean Inequality 题意 给一个长度为偶数的数组,你需要重排这个数组,使得任意一个数不 ...
- 51Nod 1526 分配 笔名
1526 分配 笔名 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 班里有n个同学.老师为他们选了n个笔名 ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...
最新文章
- 【CTF】实验吧 The Flash-14
- Linux笔记(更改权限chmod,更改所有组chown,umask,隐藏权限chattr)
- linux synproxy 抵御 ddos攻击的原理和优化
- 快讯|工业大数据产业发展联盟成立,助力我国产业生态集聚
- 博客作业03--栈和队列
- 一个XOR问题的实例---神经网络的权重到底是如何变化的
- 清理 zabbix 历史数据, 缩减 mysql 空间
- Java 开发人员 2019 生态系统信息图
- 苹果新的编程语言 Swift 语言进阶(一)--综述
- ubuntu中flashcache使用教程
- 荣耀V40 Pro全新外观曝光:熟悉的矩阵镜头造型
- 【数据分析】脑图简介数据处理
- ethtool 命令输出的注意点--网卡参数
- python3 主函数_Python3---常见函数---if __name__ == __main__
- logitech鼠标接收器配对
- C++对象数组 —— 学生信息表
- 【Redis 开发与运维】初识 Redis
- mix2线刷开发板救砖_小米MIX2线刷刷机教程_小米MIX2第三方rom包_线刷救砖教程
- 我的世界java作弊怎么开_我的世界怎么开作弊?如何启用作弊模式?
- 如何删除MySQL服务