• CODE[VS] 3269 混合背包


    3269 混合背包

     

     时间限制: 1 s
     空间限制: 256000 KB
     题目等级 : 钻石 Diamond
     
     
    题目描述 Description

    背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体积不超过V的前提下所装物品的价值的和的最大值是多少?

    输入描述 Input Description

    第一行两个数N,V,下面N行每行三个数Vi,Wi,Mi表示每个物品的体积,价值与数量,Mi=1表示至多取一件,Mi>1表示至多取Mi件,Mi=-1表示数量无限

    输出描述 Output Description

    1个数Ans表示所装物品价值的最大值

    样例输入 Sample Input

    2 10

    3 7 2

    2 4 -1

    样例输出 Sample Output

    22

    数据范围及提示 Data Size & Hint

    对于100%的数据,V <= 200000 , N <= 200

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    using namespace std;
    #define maxn 205
    int d[maxn],v[maxn],bag[maxn],f[200005];
    int max(int a,int b)
    {
        if(a>=b)
            return a;
        else return b;
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        memset(f,0,sizeof(f));
        for(int i=0; i<n; i++)
            scanf("%d%d%d",&v[i],&d[i],&bag[i]);
        for(int i=0; i<n; i++)
        {
            if(bag[i]==-1)
                for(int j=v[i]; j<=m; j++)
                    f[j] = max(f[j],f[j-v[i]]+d[i]);
            else
            {
                int x = bag[i];
                for(int k=1;k<=x;k<<=1)
                {//i<<=n  等价于  i=i*(2的n次方);  i>>=n  等价于  i=i/(2的n次方)(n>=0)(暂不考虑溢出的情况)
                    for(int j=m;j>=v[i]*k;j--)
                        f[j] = max(f[j],f[j-v[i]*k]+d[i]*k);
                    x -= k;
                }
                if(x!=0)
                {
                    for(int j=m;j>=v[i]*x;j--)
                    {
                        f[j] = max(f[j],f[j-v[i]*x]+d[i]*x);
                    }
                }
            }
        }
        cout << f[m];
        return 0;
    }
    彼时当年少,莫负好时光。
  • 相关阅读:
    三目运算符
    程序流程结构——if语句
    类型转换
    运算符
    scanf函数与getchar函数
    结构体成员有冒号 位域 位段
    AI作曲的一个点子
    《惯性导航》邓正隆 第一章 惯性导航的基础知识
    《C陷阱与缺陷》 第0章导读 第1章词法陷阱
    类与类之间的关系 18
  • 原文地址:https://www.cnblogs.com/l609929321/p/6741640.html
Copyright © 2020-2023  润新知