HDU 3449 Consumer (依赖背包)

本文探讨了在有限预算下如何最大化购物价值的问题,通过分析商品价格与价值的关系,采用动态规划方法解决商品购物最优价值分配问题。

Consumer

Time Limit: 4000/2000 MS (Java/Others)   

Memory Limit: 32768/65536 K (Java/Others)

Total Submission(s): 778    Accepted Submission(s): 419

Problem Description FJ is going to do some shopping, and before that, he needs some boxes to carry the different kinds of stuff he is going to buy. Each box is assigned to carry some specific kinds of stuff (that is to say, if he is going to buy one of these stuff, he has to buy the box beforehand). Each kind of stuff has its own value. Now FJ only has an amount of W dollars for shopping, he intends to get the highest value with the money.  

Input

The first line will contain two integers, n (the number of boxes 1 <= n <= 50), w (the amount of money FJ has, 1 <= w <= 100000) Then n lines follow. Each line contains the following number pi (the price of the ith box 1<=pi<=1000), mi (1<=mi<=10 the number goods ith box can carry), and mi pairs of numbers, the price cj (1<=cj<=100), the value vj(1<=vj<=1000000)  

Output

For each test case, output the maximum value FJ can get  

Sample Input

3 800

300 2 30 50 25 80

600 1 50 130

400 3 40 70 30 40 35 60  

Sample Output

210

思路:每个箱子以及它能装的物品构成一个分组,若当前组为第 i 组,考虑要取该组中的物品,则要在前 i-1 组在最大费用为 w - p的情况下的最优值去更新。(其中w为最大费用,p为第 i 组中箱子的费用,因为要取第 i 组,所以必须预留p费用给该组的箱子用)参照《背包九讲》可以知道,对于有依赖的背包,可以先对附件进行01背包(在已经预留了p费用的情况下),所以对于每一个组,先将之前的最优值继承下来,然后根据自己组的附件进行01背包,既dp[i] = max(dp[i], dp[i - cost] + val)。其中dp[i]表示费用为 i 时的最优值。

View Code
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #define SIZE 100005
 6 
 7 using namespace std;
 8 
 9 int dp[SIZE];
10 int dp2[SIZE];
11 int n,w;
12 
13 int main()
14 {
15     while(~scanf("%d%d",&n,&w))
16     {
17         memset(dp,0,sizeof(dp));
18         for(int i=1; i<=n; i++)
19         {
20             int p,m;
21             scanf("%d%d",&p,&m);
22             memcpy(dp2,dp,sizeof(dp));
23             for(int j=1; j<=m; j++)
24             {
25                 int temp1,temp2;
26                 scanf("%d%d",&temp1,&temp2);
27                 for(int k=w-p; k>=temp1; k--)
28                     dp2[k] = max(dp2[k],dp2[k-temp1]+temp2);
29             }
30             for(int k=p; k<=w; k++)
31                 dp[k] = max(dp[k],dp2[k-p]);
32         }
33         printf("%d\n",dp[w]);
34     }
35     return 0;
36 }

 

下载前可以先看下教程 https://pan.quark.cn/s/a426667488ae 标题“仿淘宝jquery图片左右切换带数字”揭示了这是一个关于运用jQuery技术完成的图片轮播机制,其特色在于具备淘宝在线平台普遍存在的图片切换表现,并且在整个切换环节中会展示当前图片的序列号。 此类功能一般应用于电子商务平台的产品呈现环节,使用户可以便捷地查看多张商品的照片。 说明中的“NULL”表示未提供进一步的信息,但我们可以借助标题来揣摩若干核心的技术要点。 在构建此类功能时,开发者通常会借助以下技术手段:1. **jQuery库**:jQuery是一个应用广泛的JavaScript框架,它简化了HTML文档的遍历、事件管理、动画效果以及Ajax通信。 在此项目中,jQuery将负责处理用户的点击动作(实现左右切换),并且制造流畅的过渡效果。 2. **图片轮播扩展工具**:开发者或许会采用现成的jQuery扩展,例如Slick、Bootstrap Carousel或个性化的轮播函数,以达成图片切换的功能。 这些扩展能够辅助迅速构建功能完善的轮播模块。 3. **即时数字呈现**:展示当前图片的序列号,这需要通过JavaScript或jQuery来追踪并调整。 每当图片切换时,相应的数字也会同步更新。 4. **CSS美化**:为了达成淘宝图片切换的视觉效果,可能需要设计特定的CSS样式,涵盖图片的排列方式、过渡效果、点状指示器等。 CSS3的动画和过渡特性(如`transition`和`animation`)在此过程中扮演关键角色。 5. **事件监测**:运用jQuery的`.on()`方法来监测用户的操作,比如点击左右控制按钮或自动按时间间隔切换。 根据用户的交互,触发相应的函数来执行...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值