• 【luogu2224】【BZOJ1222】 [HNOI2001]产品加工 [动规 背包]


    2224 [HNOI2001]产品加工

    哭辽 决定以后手写比较函数QAQ

    开始想了一个二维的 但不对 瓜想了半天决定看题解

    发现这个变量的含义很熟悉f[i][j] 表示前i件产品,第一个机器用时j,第二个机器用时f[i][j]

    然后就分三种情况来讨论 分别是用第一个机器 第二个机器 两个一起用 算是背包吧.... 

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    #define ll long long
    #define rg register
    const int N=6000+5,M=200000+5,inf=0x3f3f3f3f,P=19650827;
    int n,sum=0,f[M],ans=inf;
    template <class t>void rd(t &x){
        x=0;int w=0;char ch=0;
        while(!isdigit(ch)) w|=ch=='-',ch=getchar();
        while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
        x=w?-x:x;
    }
    
    #define Max(x,y) (x)>(y)?(x):(y)
    #define Min(x,y) (x)>(y)?(y):(x)
    
    int main(){
    //    freopen("in.txt","r",stdin);
        rd(n);
        for(int i=1,a,b,c;i<=n;++i){
            rd(a),rd(b),rd(c);
            sum+=Max(a,Max(b,c));
            if(!a) a=inf;if(!b) b=inf;if(!c) c=inf;
        for(int v=sum;v>=0;--v){
            if(b!=inf) f[v]+=b;
            else f[v]=inf;//用b 
            if(v>=a) f[v]=Min(f[v],f[v-a]);//用a
            if(v>=c) f[v]=Min(f[v],f[v-c]+c);//一起 
        }
        }
        for(int i=0;i<=sum;++i) ans=Min(ans,Max(i,f[i]));
        printf("%d",ans);
        return 0;
    }
     
  • 相关阅读:
    Java知识点:javac命令
    Java知识点:内部类
    证明:寝室分配问题是NPC问题
    Java知识点:Object类
    Java 知识点:序列化
    Python3玩转儿 机器学习(2)
    Python3玩转儿 机器学习(1)
    python re模块findall使用
    百度URL 部分参数
    python datetime模块
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11173008.html
Copyright © 2020-2023  润新知