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;
    }
    
    
  • 相关阅读:
    与HDFS交互- By java API编程
    与HDFS交互- By web界面
    与HDFS交互-By shell命令
    hadoop下HDFS基本命令使用
    ubuntu安装hadoop经验
    HTTP状态码了解
    软件需求与分析
    软件需求与分析
    软件需求与分析
    浪潮之巅
  • 原文地址:https://www.cnblogs.com/zzyh/p/15253920.html
Copyright © 2011-2022 走看看