codeforeces 1140C Playlist(贪心)

题目: 传送门
思路: 我们选择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;
}

猜你喜欢

转载自blog.csdn.net/qq_43305984/article/details/88858792