zoukankan      html  css  js  c++  java
  • 多重背包的二进制优化——DP

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define LL long long
    using namespace std;
    const int M=2e5+7;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int n,V;
    int cnt,w[M],v[M],f[M];
    int main(){
        int x,y,c,sum;
        n=read(); V=read();
        for(int i=1;i<=n;i++){
            x=read(); y=read(); c=read();
            sum=0;
            for(int k=0;(1<<k)<=c;k++){
                if(sum+(1<<k)<=c){
                    sum=sum+(1<<k);
                    cnt++; v[cnt]=x*(1<<k); w[cnt]=y*(1<<k);
                }
            }
            if(sum<c) cnt++,v[cnt]=(c-sum)*x,w[cnt]=(c-sum)*y;
        }
        for(int i=1;i<=cnt;i++) for(int x=V;x>=v[i];x--) f[x]=max(f[x],f[x-v[i]]+w[i]);
        printf("%d
    ",f[V]);
        return 0;
    }
    View Code
  • 相关阅读:
    ARTS第十一周
    ARTS第十周
    ARTS第九周
    一.Java技术现象
    ARTS第八周
    2019书单
    10.枚举的使用
    9.文件输入与输出
    软件模块化设计
    8.String API
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/11871819.html
Copyright © 2011-2022 走看看