zoukankan      html  css  js  c++  java
  • 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;
    }
    彼时当年少,莫负好时光。
  • 相关阅读:
    JAVA基础补漏--文件读取
    JAVA-Lambda表达式
    JAVA基础补漏--可变参数
    JAVA基础补漏--SET
    Apache ab 测试结果的分析
    同源策略和跨域问题
    php curl 伪造IP来源的实例代码
    HTTP状态码详解
    PHP 根据IP地址获取所在城市
    MySQL MERGE存储引擎 简介及用法
  • 原文地址:https://www.cnblogs.com/l609929321/p/6741640.html
Copyright © 2011-2022 走看看