题目链接: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;
}