zoukankan      html  css  js  c++  java
  • HDOJ 3449 Consumer(简单的依赖背包)

    题意:

    有很多个箱子,想买箱子中的物品必须先买下箱子

    思路:

    依赖背包,实际的操作过程中依然需要注意几个点:01背包的时候,背包容量是由max-p到ci,而非max到p+ci。

    至于为什么,因为后一种则就是表示每个物品代价是p+ci,而非ci了,所以此时就会计算错误

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <vector>
    using namespace std;
    
    #define max(a,b) (((a) > (b)) ? (a) : (b))
    
    const int MAXN = 100010;
    int dp[MAXN], ansdp[MAXN];
    
    int main()
    {
        int n, w;
        while (scanf("%d %d", &n, &w) != EOF)
        {
            int p, m;
            memset(ansdp, 0, sizeof(ansdp));
    
            for (int i = 0; i < n; ++i)
            {
                scanf("%d %d", &p, &m);
                int c, v;
                // memset(dp, 0, sizeof(dp));
                memcpy(dp, ansdp, sizeof(dp));
                // dp[p] = 0;
                for (int j = 0; j < m; ++j)
                {
                    scanf("%d %d", &c, &v);
                    for (int k = w - p; k >= c; --k)
                            dp[k] = max(dp[k], dp[k-c] + v);
                }
                for (int j = w; j >= p; --j)
                    // for (int k = p; k <= j; ++k)
                        ansdp[j] = max(ansdp[j], dp[j-p]);
            }
            printf("%d\n", ansdp[w]);
        }
        return 0;
    }

     

    -------------------------------------------------------

    kedebug

    Department of Computer Science and Engineering,

    Shanghai Jiao Tong University

    E-mail: kedebug0@gmail.com

    GitHub: http://github.com/kedebug

    -------------------------------------------------------

  • 相关阅读:
    Python3安装
    HTML基础
    Python Socket
    python常用模块
    JSON.stringify的三个参数
    判断数组中存在重复元素
    vant-ui表单验证
    如何计算出浏览器的帧数?requestAnimationFrame
    js判断两个区间是否存在交集
    怎么在组件内部判断出是否插入了slot
  • 原文地址:https://www.cnblogs.com/kedebug/p/2761672.html
Copyright © 2011-2022 走看看