• CodeForces 3B-Lorry


    去他喵的dp,去他喵的贪心,直接暴力就完事了

    先对两种分别从大到小排序

    然后枚举选了几个体积为1的,选的这些肯定是价值最大的那些,用前缀和就完事了,枚举了体积为1的个数体积为2的个数自然就知道了,再加上他们的价值就是总价值

    #include<bits/stdc++.h>
    using namespace std;
    const int N=100000+10;
    struct S1
    {
        int id;
        int v;
    }s1[N];
    struct S2
    {
        int id;
        int v;
    }s2[N];
    int rear1,rear2;
    bool cmp1(S1 a,S1 b){return a.v>b.v;}
    bool cmp2(S2 a,S2 b){return a.v>b.v;}
    int sum1[N],sum2[N];
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            int a,b;
            cin>>a>>b;
            if(a==1)
            {
                s1[++rear1].id=i;
                s1[rear1].v=b;
            }
            else
            {
                s2[++rear2].id=i;
                s2[rear2].v=b;
            }
        }
        sort(s1+1,s1+rear1+1,cmp1);
        sort(s2+1,s2+rear2+1,cmp2);
        for(int i=1;i<=rear1;i++)
            sum1[i]=(sum1[i-1]+s1[i].v);
        for(int i=1;i<=rear2;i++)
            sum2[i]=(sum2[i-1]+s2[i].v);
     
        int ans=0,cnt1=0,cnt2=0;
        for(int i=0;i<=rear1;i++)
        {
            if(i<=m)
            {
                int tans=0;
                tans+=sum1[i];
                if((m-i)/2>0)      //总体积-体积为1的总体积就是剩下的体积,出个2就是选的体积为2的个数
                {
                    tans=tans+sum2[min((m-i)/2,rear2)];
                }
                if(tans>ans)
                {
                    ans=tans;
                    cnt1=i;
                    cnt2=min((m-i)/2,rear2);
                }
            }
        }
        cout<<ans<<endl;
        for(int i=1;i<=cnt1;i++)
            cout<<s1[i].id<<" ";
        for(int i=1;i<=cnt2;i++)
            cout<<s2[i].id<<" ";
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    桥接,NAT,Host Only的区别
    PHP并发IO编程之路
    Git SSH Key 生成步骤
    composer安装学习
    db file sequential read等待事件的一点研究
    多个hints 怎么写?
    再次遭遇笛卡尔积
    pl/sql 在一个程序块里打印日志输出到表格
    pl/sql 程序块里打印问题
    利用ordered hints优化SQL
  • 原文地址:https://www.cnblogs.com/spzeno/p/11296826.html
Copyright © 2020-2023  润新知