题目: 传送门
思路: 我们选择K个物品的时候,最高的beauty取决于最小值和总长度,我们可以先考虑按beauty从大到小排序,这样我们选择到第i个物品时,该物品的beauty一定是最小的,这是我们只要选择前 i个中长度前k-1个物品就可以得到一个可能的最大值.
AC代码:
struct song
{
long long t,v;
};
song s[300050];
bool cmp(const song& a,const song& b) {
return a.v>b.v;
}
priority_queue<long long,vector<long long> , greater<long long> > q;
int main() {
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++) {
cin>>s[i].t>>s[i].v;
}
sort(s,s+n,cmp);
long long ans=0;
long long sum = 0;
for(int i=0;i<n;i++) {
q.push(s[i].t);
sum+=s[i].t;
while(q.size()>k) {
sum-=q.top();
q.pop();
}
ans = max(ans,s[i].v*sum);
}
cout<<ans<<endl;
return 0;
}