ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

codeforces lorry

2021-10-21 19:34:59  阅读:152  来源: 互联网

标签:q1 cnt val lys codeforces long id lorry


刚开始一看这不01背包

一看数据nm炸了

特点是v只可能是1或者2

而2=1+1

建两个大根堆,每次拎q1的两个头出来和q2的一个头出来比较

一个很小的优化就是如果v为奇数,那么q1的最大肯定要先取

——-----

最近状态很烂,补一个死活卡在21不知道re在哪里的代码

#include<bits/stdc++.h>
using namespace std;
struct lys{
    long long id,val;

bool operator < (const lys a)const{
   return val<a.val;
}

};
long long pri[100000];
priority_queue<lys,vector<lys>,less<lys>>q1;
priority_queue<lys,vector<lys>,less<lys>>q2;
int main( )
{  //freopen("lys.in","r",stdin);
    long long n,vv;
    cin>>n>>vv;
    for(long long i=1;i<=n;i++)
    {
        long long t,p;
        cin>>t>>p;
        lys son;
        son.id=i;
        son.val=p;
        if(t==1)  q1.push(son);
         else q2.push(son);
    }
    long long ans=0,cnt=0;
    if(vv%2==1&&q1.empty( )==false)
    {  lys now=q1.top( );
        ans+=now.val;
        q1.pop( );
        cnt++;
        pri[cnt]=now.id;
        vv--;
    }
    
    
    for(long long v=0;v<=vv;)
    {  if(v==vv) break;
        lys a1,a2,a3;
        if(q1.empty( )==false)
         {
             a1=q1.top();q1.pop();
         }
         else a1.val=0;
         
        if(q1.empty( )==false)
         {
             a2=q1.top();q1.pop();
         }
         else a2.val=0;
         
         if(q2.empty( )==false)
         {
             a3=q2.top();
         }
         else a3.val=0;
        
        if(a1.val+a2.val>=a3.val)
        {
            ans+=a1.val+a2.val;
            cnt++;
            pri[cnt]=a1.id;
            cnt++;
            pri[cnt]=a2.id;
        }
        else if(a3.val>a1.val+a2.val)
        {
          ans+=a3.val;
          cnt++;
          pri[cnt]=a3.id;
          q1.push(a1);q1.push(a2);    
          q2.pop( );
        }
        v+=2;    
    }
    cout<<ans<<endl;
    for(long long i=1;i<=cnt;i++)
    {
        cout<<pri[i]<<" ";
    }
}

 

标签:q1,cnt,val,lys,codeforces,long,id,lorry
来源: https://www.cnblogs.com/liyishui2003/p/15434764.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有