http://acm.hdu.edu.cn/showproblem.php?pid=6015
这是BC的一道A题,真的,我在赛场时我理解出现了偏差,我以为是逃过2堂课后上一堂课之后就还可以继续逃。导致这题花15分钟才做出…………
其实,题目很简单,就是map的应用罢了,就是用2个map存一下每种课所对应的最大价值和第二大价值即可
#include <iostream>
#define maxs 202020
#define mme(i,j) memset(i,j,sizeof(i))
#include <string>
#include <map>
using namespace std;
map<string,int>mp1,mp2;
string str;
int val;
int main()
{
int t;
cin>>t;
while(t--)
{
mp1.clear();
mp2.clear();
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>str>>val;
if(mp1[str]<val){
mp2[str]=mp1[str];
mp1[str]=val;
}
else if(mp2[str]<val){
mp2[str]=val;
}
}
int ans=0;
map<string,int>::iterator it;
for(it=mp1.begin();it!=mp1.end();it++){
ans+=it->second;
}
for(it=mp2.begin();it!=mp2.end();it++){
ans+=it->second;
}
cout<<ans<<endl;
}
return 0;
}