知识点:排序,模拟
题目大意:
给你t组,每组有n个软件,k个内存量,和n个软件对应的内存,运行对应软件可额外获得的内存量,让你求最终可获得的最大的内存量
解题思路:
1.写一个结构体排序,把内存小的放前面,相等时,把对应附増的内存量大的放前面。
2.最后输出最大的内存量
AC代码:
#include<bits/stdc++.h>
using namespace std;
struct name{
int a;//每个软件对应的内存
int b;//附増内存
}nc[105];//用数组nc来存储
bool cmp(name a,name b)
{
if(a.a!=b.a)//软件对应内存不等时
{
return a.a<b.a;//内存小的放前面
}
else{
return a.b>b.b;//相等时附増内存大的放前面
}
}
long long int t,n,k;
int main()
{
cin>>t;//t组数据
while(t--)
{
cin>>n>>k;//n个软件,原来内存
for(int i=1;i<=n;i++)
{
cin>>nc[i].a;//每个软件对应的内存
}
for(int i=1;i<=n;i++)
{
cin>>nc[i].b;//附増内存
}
sort(nc+1,nc+1+n,cmp);//排序
for(int i=1;i<=n;i++)
{
if(nc[i].a<=k)//表示此时可以运行此软件
{
k+=nc[i].b;//加上对应附增的内存
}
else{
break;
}
}
cout<<k<<endl;//输出最后最大内存量
}
return 0;
}