dp训练第23题 HDU 3449 Consumer 有依赖背包

6人阅读 评论(0) 收藏 举报
分类:

现在有n(50)个主件,v(100000)体积的背包.每个主件都有一个体积(1000),没有价值.
装了主件后,可以装对应的附件(10),每个附件都有体积(100)和价值(1000000).
求最大价值.

显然是一个依赖背包问题.
我感觉我之前理解错了依赖问题的算法.
所谓对内部附件进行01背包,实际上应该是在原来的dp基础上直接对每个附件进行.
最后与原来的dp基础相比取最大值.注意比较时应该加上主件的元素.

这个题我想的很复杂,做了很长时间然后没有做出来,看了一下题解发现实际上是一个简单题.关键是之前没有掌握到有依赖背包的本质.

WA一次,因为多组数据.

int dp[M],tmp[M];

    int n,v;
    while(scanf("%d%d",&n,&v)!=EOF)
    {
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
        {
            int pri_volume=read(),num=read();
            memcpy(tmp,dp,sizeof(dp));
            while(num--)
            {
                int volu=read(),valu=read();
                for(int j=v;j>=volu;j--)
                    tmp[j]=max(tmp[j],tmp[j-volu]+valu);
            }
            for(int j=v;j>=pri_volume;j--)
                dp[j]=max(dp[j],tmp[j-pri_volume]);
        }
        printf("%d\n",dp[v] );
    }

学会了这种方法,将金明的预算方案也重做一下.

查看评论

如何加快小程序的启动速度?

作者:javaduke 原创于:www.dukejava.com如 何 缩 短 java 下 载 和 装 入 时 间 前 言:很 多 朋 友 抱 怨 applet 启 动 太 慢,其 实 恰 当 的 ...
  • javaduke
  • javaduke
  • 2000-09-04 20:54:00
  • 1155

hdu 3449(依赖背包) Consumer

题意:给n个箱子,每个箱子有个费用pi,每个箱子里面有m个物品,每个物品有两个属性,一个费用wi和一个价值vi。买物品的时候要把所属的箱子一起买了,问给一个金额W最多能获得多少价值?思路依赖背包。《背...
  • Notdeep__acm
  • Notdeep__acm
  • 2015-07-16 00:44:08
  • 595

hdu 3449 Consumer 依赖背包

依赖背包 事实上,这是一种树形DP,其特点是每个父节点都需要对它的各个儿子的属性进行一次DP以求得自己的相关属性。 fj打算去买一些东西,在那之前,他需要一些盒子去装他打算要买的不同的物品。每一...
  • yan_____
  • yan_____
  • 2013-01-24 21:03:42
  • 1313

hdu 3449 有依赖的背包

背景:1——TL按照背包九讲的把没一个依赖组转用01背包转化成物品集合,然后又用分组背包的方法来做,超时。优化无果,借鉴别人思路ac。 正确写法思路:先不管必须选盒子这个前提,按照01背包的思想把物...
  • jibancanyang
  • jibancanyang
  • 2015-03-14 14:07:28
  • 564

HDU 3449 Consumer 【有依赖背包】【dp】

Consumer Time Limit: 4000/2000 MS(Java/Others)    Memory Limit: 32768/65536 K (Java/Others) Total Su...
  • baidu_19306071
  • baidu_19306071
  • 2015-08-27 13:03:08
  • 193

codeforces 730J (01背包)

题目链接:点击这里题意:给出n个杯子的容量和杯内水的体积,问最少多少个杯子能够装下所有的水,以及在这个杯子数量下最少需要倒多少体积。需要的最少杯子数很好求,按照体积排个序扫一遍就能知道。然后选择某些杯...
  • morejarphone
  • morejarphone
  • 2016-10-25 20:28:37
  • 596

HDU 3449 Consumer(依赖背包)

依赖背包入门提。 购买某个物品时,必须先买其对应的箱子。求最大价值。 其实这是一种树形DP,因为对每个父节点都要更新其儿子值。 对第i组数据,先存储其买当前盒子的值,然后对这个组做01背包,这个当然是...
  • Yeluorag
  • Yeluorag
  • 2015-09-09 09:23:23
  • 203

HDU 3449 Consumer 依赖背包

FJ is going to do some shopping, and before that, he needs some boxes to carry the different kinds o...
  • YCQ_Lancet
  • YCQ_Lancet
  • 2017-11-21 16:45:24
  • 93

HDU 3449 Consumer (依赖背包)

Consumer Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others) To...
  • acbron
  • acbron
  • 2013-04-10 21:01:25
  • 390

HDU 3449 Consumer (依赖背包)

Consumer Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 32768/65536K (Java/Other) Tota...
  • Mr_Treeeee
  • Mr_Treeeee
  • 2017-05-07 16:49:28
  • 167
    个人资料
    持之以恒
    等级:
    访问量: 6500
    积分: 1331
    排名: 3万+
    文章存档
    最新评论