zoukankan      html  css  js  c++  java
  • bzoj5441: [Ceoi2018]Cloud computing

    跟着大佬做题。。

    这题也是有够神仙了。观察一下性质,c很小而f是一个限制条件(然而我并不会心态爆炸)

    %了一发,就是把电脑和订单一起做背包,订单的c视为负而电脑的v为负,f由大到小排序做背包

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    
    struct node{int c,f;LL v;}a[4100];
    bool cmp(node n1,node n2){return n1.f==n2.f?n1.c>n2.c:n1.f>n2.f;}
    LL f[110000];
    int main()
    {
        int n,m;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d%lld",&a[i].c,&a[i].f,&a[i].v);
            a[i].v=-a[i].v;
        }
        scanf("%d",&m);
        for(int i=n+1;i<=n+m;i++)
        {
            scanf("%d%d%lld",&a[i].c,&a[i].f,&a[i].v);
            a[i].c=-a[i].c;
        }
        n+=m;
        sort(a+1,a+n+1,cmp);
        
        int maxp=0;LL lin;
        memset(f,-63,sizeof(f));f[0]=0;
        lin=f[1];
        for(int i=1;i<=n;i++)
        {
            if(a[i].c>0)
            {
                for(int j=maxp;j>=0;j--)
                    if(f[j]!=lin)
                    {
                        f[j+a[i].c]=max(f[j+a[i].c],f[j]+a[i].v);
                        if(j+a[i].c>maxp)maxp=j+a[i].c;
                    }
            }
            else
            {
                for(int j=-a[i].c;j<=maxp;j++)
                    if(f[j]!=lin)
                        f[j+a[i].c]=max(f[j+a[i].c],f[j]+a[i].v);
            }
        }
        
        LL ans=0;
        for(int i=0;i<=maxp;i++)ans=max(ans,f[i]);
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    mac 10.9 安装 gevent
    flash builder4.7 for Mac升级AIRSDK详解
    重走java--Step 3
    重走java--Step 2
    重走java---Step 1
    web初学之MVC
    web初学之JavaBean
    微信公众号开发之开发模式的启用——学习笔记
    微信公众号开发之开通账号——学习笔记
    web初学之request,session与application
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/9667783.html
Copyright © 2011-2022 走看看