大致思路就是把课程建成结构体,对名字进行排序,名字相同用价值排序,排完每个课程最多取两个。(第一次写Best Coder。。。。)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct lessen
{
string name;
int val;
}L[105];
bool cmp(lessen a ,lessen b)
{
if (a.name==b.name)
return a.val>b.val;
return a.name>b.name;
}
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
scanf("%d",&n);
for (int i = 0; i < n; i++)
{
cin >> L[i].name;
scanf("%d",&L[i].val);
}
sort(L,L+n,cmp);
int ans = L[0].val;
int num = 1;
for (int i = 1 ; i < n ; i++)
{
if (L[i].name==L[i-1].name)//名字相同的看出现几次
{ //出现两次以后就直接跳过
if (num>=2)
continue;
else {
ans+=L[i].val;
num++;
}
}
else
{
num = 1;
ans+=L[i].val;
}
}
printf("%d\n",ans);
}
return 0;
}