cf#579 F2

http://codeforces.com/contest/1203/problem/F2
F2. Complete the Projects (hard version)
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
The only difference between easy and hard versions is that you should complete all the projects in easy version but this is not necessary in hard version.

Polycarp is a very famous freelancer. His current rating is r units.

Some very rich customers asked him to complete some projects for their companies. To complete the i-th project, Polycarp needs to have at least ai units of rating; after he completes this project, his rating will change by bi (his rating will increase or decrease by bi) (bi can be positive or negative). Polycarp’s rating should not fall below zero because then people won’t trust such a low rated freelancer.

Polycarp can choose the order in which he completes projects. Furthermore, he can even skip some projects altogether.

To gain more experience (and money, of course) Polycarp wants to choose the subset of projects having maximum possible size and the order in which he will complete them, so he has enough rating before starting each project, and has non-negative rating after completing each project.

Your task is to calculate the maximum possible size of such subset of projects.

Input
The first line of the input contains two integers n and r (1≤n≤100,1≤r≤30000) — the number of projects and the initial rating of Polycarp, respectively.

The next n lines contain projects, one per line. The i-th project is represented as a pair of integers ai and bi (1≤ai≤30000, −300≤bi≤300) — the rating required to complete the i-th project and the rating change after the project completion.

Output
Print one integer — the size of the maximum possible subset (possibly, empty) of projects Polycarp can choose.

Examples
inputCopy
3 4
4 6
10 -2
8 -1
outputCopy
3
inputCopy
5 20
45 -6
34 -15
10 34
1 27
40 -45
outputCopy
5
inputCopy
3 2
300 -300
1 299
1 123
outputCopy
3
算减少部分的时候,如果不满足条件,就在前面找减得最多的(优先队列,开始的两个为什么要那样建优先队列前一篇有证明

#include<stdio.h>
#include<queue>
using namespace std;
struct node1
{
	int num,d;
	bool operator < (const node1& b) const 
	{
		return num>b.num;
	}
};
struct node2
{
	int num,d;
	bool operator < (const node2& b) const 
	{
		return num<b.num;
	}
};
priority_queue<node1> q1;
priority_queue<node2> q2;
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
	int n,r;
	int tmp1,tmp2;
	scanf("%d%d",&n,&r);
	int ans=0;
	for(int i=0;i<n;i++)
	{
		scanf("%d%d",&tmp1,&tmp2);
		if(tmp2>=0)
		{
			node1 tmp;
			tmp.num=tmp1;
			tmp.d=tmp2;
			q1.push(tmp);
		}
		else
		{
			node2 tmp;
			tmp.num=tmp1+tmp2;
			tmp.num=max(tmp.num,0);
			tmp.d=tmp2;		
			q2.push(tmp);
		}
	}
	while(!q1.empty())
	{
		node1 tmp=q1.top();
		q1.pop();
		if(r<tmp.num)		
		{
			continue;
		}
		r+=tmp.d;
		ans++;
	}
	while(!q2.empty())
	{
		node2 tmp=q2.top();
		q2.pop();
		r+=tmp.d;
		q.push(tmp.d);
		if(r<tmp.num)
		{
			r-=q.top();
			q.pop();	
		}
	}
	ans+=q.size();
	printf("%d\n",ans);
	return 0;
}
### 查找特定哈希值的相关信息 对于给定的哈希值 `2f49cf97546f2c24152b216712546f112e29152b1967226b6f5f50`,通常这类哈希值用于标识文件、数据块或其他对象,在不同的上下文中具有不同意义。在区块链技术中,此哈希可能代表交易记录;而在版本控制系统(如Git)里,则可能是某个提交(commit) 或者树(tree) 对象。 然而,考虑到所提供的另一个SHA-256哈希值 `5f5bd2d36b154c9cfd4addd4cdc2412440f40763dca926b85ff02ce16a38758f`[^1],这表明当前讨论更倾向于与安全散列算法(SHA)有关的应用场景。因此,假设上述较长字符串同样遵循相同的编码规则——即它也是一串由SHA-256产生的固定长度的消息摘要。 如果目标是在Docker环境中查找与此哈希匹配的对象,可以尝试使用命令行工具查询本地存储中的镜像列表: ```bash docker images | grep 2f49cf97546f2c24152b216712546f112e29152b1967226b6f5f50 ``` 不过需要注意的是,由于Docker使用的ID通常是较短形式(前几位字符),所以直接通过完整的长哈希来定位具体条目可能会遇到困难。另外一种方法是从容器层历史记录入手,利用如下指令查看是否存在对应指纹: ```bash for image in $(docker images -q); do echo $image; docker history $image | grep 2f49cf97546f2c24152b216712546f112e29152b1967226b6f5f50 ; done ``` 以上操作可以帮助确认是否有任何已安装的Docker镜像包含了所提到的具体哈希值作为其组成部分之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值