Download More RAM翻译+代码

29 篇文章 0 订阅
14 篇文章 0 订阅

题目链接:https://acs.jxnu.edu.cn/contest/23/board/challenge/C

描述:

你知道你可以下载更多的RAM吗?这里有一个商店,里面有n个你不同的软件可以增加你的RAM,第i个软件运行增加ai GB的内存(暂时地,一旦该项目被运行,将返回RAM),并且将返回给你额外的bi GB RAM(永久地,每个软件只可以被用一次)

你的PC目前有K GB  RAM.

如果它将运用超出你目前拥有的RAM,你将不能使用这个RAM增加软件。

因为世界上RAM是最重要的,你想知道可实现的最大可能RAM量是多少吗?

输入:

第一行包含单个整数t (1≤t≤100)--测试组数,测试数据描述如下:

每组测试数据的第一行包含整数n和k(1≤n≤100, 1≤k≤1000).

然后接下来两行,每行包含n个整数描述数组a和b(1≤ai,bi≤1000).

输出:

对于每组测试数据,输出一行包含你可以得到的最多的RAM数量。

生词:

temporarily 暂时地

permanently 永久地

initially最初地

注释:

在第一组测试数据中,你最初只有足够的RAM能运行第三个软件,但是能增加你的RAM到20GB,允许你使用第一个软件,增加你的RAM到29GB,仅有的剩下的软件需要30 GB RAM,所以你必须停下。

在二组测试数据,你可以使用第一个,第二个,第四个和第五个软件,并且每个软件只需要1GB RAM就可以运行,并且增加你的RAM到5GB,然后使用留下来的那个软件增加你的RAM到6GB.

在第三组测试数据中,所有的软件都需要至少1GB的RAM才能运行,所以你的RAM保持在1GB.

参考代码:

#include<stdio.h>
void swap(int &a,int &b)
{
	int temp=a;
	a=b;
	b=temp;
}
void quickSort(int a[],int b[],int l,int r)
{
	if(l>=r)
	  return;
	int k=a[l];
	int i=l,j=r;
	while(i!=j)
	{
		while(j>i&&a[j]>=k)
		   --j;
		swap(a[i],a[j]);
		swap(b[i],b[j]);
		while(i<j&&a[i]<=k)
	     	++i;
	    swap(a[i],a[j]);
	    swap(b[i],b[j]);   
	}
	quickSort(a,b,l,i-1);
	quickSort(a,b,i+1,r);
}
int main()
{
	int t,n,k,i,j,m;
	int a[100],b[100];
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&k);
		for(i=0;i<n;i++)
		   scanf("%d",&a[i]);
		for(i=0;i<n;i++)
		   scanf("%d",&b[i]);
		quickSort(a,b,0,n-1);
	//	for(i=0;i<n;i++)
	  //  	printf("%d  %d\n",a[i],b[i]);
		for(i=0;i<n;i++)
		{
			if(k>=a[i])
			k+=b[i];
		}
		printf("%d\n",k) ;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值