#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <climits>
#include <cstdlib>
#include <ctime>
using namespace std;
//ios::sync_with_stdio(false);
struct node
{
int p,q;
};
struct nu
{
int id,q,p;
bool operator < (const nu& t)const
{
return q > t.q;
}
};
int main()
{
int t;
cin >> t;
while(t--)
{
int n,b;
cin >> n >> b;
map<string,int> ma;
int cnt = 0;
vector<node> vec[1005];
for(int i = 0;i < n;i++)
{
char ty[30],na[30];
node a;
cin >> ty >> na >> a.p >> a.q;
if(ma.count(ty) == 0)
{
vec[cnt].push_back(a);
ma[ty] = cnt;
cnt++;
}
else
{
vec[ma[ty]].push_back(a);
}
}
int sum = 0;
priority_queue<nu> que;
int ans = INT_MAX;
for(int i = 0 ; i < cnt;i++)
{
int m = vec[i].size();
for(int j = 0;j < m;j++)
{
for(int k = j+1; k < m;k++)
{
if(vec[i][j].p > vec[i][k].p)
swap(vec[i][j],vec[i][k]);
}
}
sum += vec[i][0].p;
nu a;
a.id = i;
a.q = vec[i][0].q;
a.p = vec[i][0].p;
if(a.q < ans)
ans = a.q;
que.push(a);
}
while(1)
{
nu tm = que.top();
que.pop();
ans = tm.q;
int en = vec[tm.id].size();
int i;
for(i = 0; i < en; i++)
{
if(vec[tm.id][i].q > tm.q)
{
break;
}
}
if(i < en)
{
nu a;
a.id = tm.id;
a.q = vec[tm.id][i].q;
a.p = vec[tm.id][i].p;
que.push(a);
sum -= tm.p;
sum += a.p;
if(sum > b)
break;
}
else
{
break;
}
}
printf("%d\n",ans);
}
return 0;
}
最大化最小值的思路是从先找到一个能用的方案,然后找到一个能替代最小值的的元素替代掉最小值,如果替代之后的方案仍然符合要求那么这个最小值就继续按照上述思路更新最小值
该题中首先采用一个在每一个种类的配件中选一个最小的价值的配件,如果这个方案都不符合要求的话那么就无解了,然后从品质最小的配件的种类中挑选出一个品质比他要高的元件,因为价格是按照升序排列的所以选出来的如果不可以的话说明就不能更新最小值了,所以这是一个最优的方案啦。乳沟还是符合方案 的话就一直按照这个歌思路进行更新最小值。
Output
Per testcase:
- One line with one integer: the maximal possible quality.
Sample Input
1 18 800 processor 3500_MHz 66 5 processor 4200_MHz 103 7 processor 5000_MHz 156 9 processor 6000_MHz 219 12 memory 1_GB 35 3 memory 2_GB 88 6 memory 4_GB 170 12 mainbord all_onboard 52 10 harddisk 250_GB 54 10 harddisk 500_FB 99 12 casing midi 36 10 monitor 17_inch 157 5 monitor 19_inch 175 7 monitor 20_inch 210 9 monitor 22_inch 293 12 mouse cordless_optical 18 12 mouse microsoft 30 9 keyboard office 4 10
Sample Output
9