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

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

  • 相关阅读:
    组合模式
    备忘录模式
    适配器模式
    状态模式
    观察者模式
    建造者模式
    地图染色-四色定理
    c++传递函数当作对象传递
    位向量实现集合—王晓东数据结构
    动态规划之最大连续子序列
  • 原文地址:https://www.cnblogs.com/kedebug/p/2761672.html
Copyright © 2011-2022 走看看