翻译:
描述:你知道你可以下载更多的内存吗?现在有一家有n种不同的软件来增加你的内存的商店。第二个内存增加软件需要a[i] GB的内存来运行(暂时,程序运行完毕,就可以拿回内存),并给你额外的b[i] GB的内存(永久)。每个软件只能使用一次。目前,你的电脑有kGB的内存;
注意,如果一个增加内存的软件使用的内存比你现有的多,你就不能使用它;
既然内存是世界上最重要的东西,你会想知道,最大可能达到的内存量是多少;
输入:第一行包含一个范围为[1,100]的整数t,代表测试用例的数量;
测试用例的描述如下:第一行包含整数n和k (1≤n≤100,1≤k≤1000);
后两行,每一行包含描述数组a和b的n个整数(1≤a[i],b[i]≤1000);
输出:对于每个测试用例,输出一个整数代表你能达到的最大内存量,每个用例输出占一行;
注释:第一个测试用例中,最初只能运行第三个软件,但是这样会把内存增加到20 GB,这使得你可以使用第一个软件,然后你的内存会增加到29GB。而剩下的唯一一个软件需要30 GB的内存,所以就此停下了;
第二个测试案例中,你可以使用第一个、第二个、第四个和第五个软件,每个软件只需要1 GB的内存来运行,这会使你的内存增加到5 GB,然后使用最后一个剩余的软件把内存增加到6 GB;
第三个测试案例中,所有的软件都需要超过1GB的内存才能运行,所以你的内存量为1 GB。
代码:简单排序题
#include<iostream>
#include<algorithm>
using namespace std;
struct ram{
int a;
int b;
}r[105];
bool cmp(ram x,ram y){
if(x.a==y.a) return x.b>y.b;
return x.a<y.a;
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,k,i;
scanf("%d%d",&n,&k);
for(i=0;i<n;i++) cin>>r[i].a;
for(i=0;i<n;i++) cin>>r[i].b;
sort(r,r+n,cmp);
for(i=0;i<n;i++){
if(k>=r[i].a)
k+=r[i].b;
else break;
}
printf("%d\n",k);
}
return 0;
}