题目:
分析:
pair,按照第一个排序。
代码:
#include<bits/stdc++.h>
using namespace std;
bool cmp(pair<int,int> &p1,pair<int,int> &p2){
return p1.first > p2.first;
}//从大到小排
int main()
{
vector<pair<int,int> > vp;
vector<int> values;
vector<int> labels;
int num_wanted;
int use_limit;
if(num_wanted==0) return 0;
for(int i=0;i<values.size();i++)
{
pair<int,int> p;
p.first=values[i];
p.second=labels[i];
vp.push_back(p);
}
sort(vp.begin(),vp.end(),cmp);
int num=1;
map<int,int> m;
m[vp[0].second]=1;
int all=vp[0].first;
if(num_wanted==1) return vp[0].first;
for(int i=1;i<values.size();i++)
{
if(m[vp[i].second]==use_limit) continue;
m[vp[i].second]++;
all+=vp[i].first;
num++;
if(num_wanted==num) break;
}
return all;
}