zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 62 (Rated for Div. 2)C. Playlist(贪心+优先队列)

    题意:n个曲子,ti时长,bi乐趣,最多选k首,得到使sum(ti)*min(bi)最大。
    题解:bi排序,从大到小枚举,使当前bi为最小bi,从大于bi的曲子中选前k-1大。

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=3e5+7;
    
    typedef pair<int,int> pii;
    typedef long long LL;
     
    pii a[N];
    multiset<int>se;
     
    int main()
    {
    	int n,k;
    	cin>>n>>k;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i].second>>a[i].first;
    		//ti bi
    	 } 
    	 sort(a+1,a+n+1);
    	 LL sum=0,ans=0;
    	 for(int i=n;i>=1;i--)
    	 {
    	 	ans=max(ans,1LL*a[i].first*(a[i].second+sum));
    	 	se.insert(a[i].second);
    	 	sum=sum+a[i].second;
    	 	if(se.size()==k)
    	 	{
    	 		sum=sum-*(se.begin());
    	 		se.erase(se.begin());
    		}
    	 }
    	 cout<<ans; 
    	return 0;
    }
    
    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=3e5+7;
    
    typedef pair<int,int> pii;
    typedef long long LL;
     
    pii a[N];
    priority_queue<int,vector<int>,greater<int> >q;
     
    int main()
    {
    	int n,k;
    	cin>>n>>k;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i].second>>a[i].first;
    		//ti bi
    	 } 
    	 sort(a+1,a+n+1);
    	 LL sum=0,ans=0;
    	 for(int i=n;i>=1;i--)
    	 {
    	 	ans=max(ans,1LL*a[i].first*(a[i].second+sum));
    	 	q.push(a[i].second);
    	 	sum=sum+a[i].second;
    	 	if(q.size()==k)
    	 	{
    	 		sum=sum-q.top();
    	 		q.pop();
    		}
    	 }
    	 cout<<ans; 
    	return 0;
    }
    
    
  • 相关阅读:
    java中super构造方法的理解
    js和jquery
    hdfs数据导入及spark导入hdfs数据
    mysql设置定时任务
    ssh 设置无密登陆
    实验九 堆排序
    实验8 Hash表的建立和查找
    实验七 图的最小生成树算法
    实验六 huffman树的实现及应用
    实验五 二叉树的建立、遍历及应用
  • 原文地址:https://www.cnblogs.com/zzyh/p/15253920.html
Copyright © 2011-2022 走看看