小明系列故事——买年货

Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Problem Description
春节将至,小明要去超市购置年货,于是小明去了自己经常去的都尚超市。
  刚到超市,小明就发现超市门口聚集一堆人。用白云女士的话说就是:“那家伙,那场面,真是人山人海,锣鼓喧天,鞭炮齐呤,红旗招展。那可真是相当的壮观啊!”。好奇的小明走过去,奋力挤过人群,发现超市门口贴了一张通知,内容如下:
  
  值此新春佳节来临之际,为了回馈广大顾客的支持和厚爱,特举行春节大酬宾、优惠大放送活动。凡是都尚会员都可用会员积分兑换商品,凡是都尚会员都可免费拿k件商品,凡是购物顾客均有好礼相送。满100元送bla bla bla bla,满200元送bla bla bla bla bla...blablabla....
  
  还没看完通知,小明就高兴的要死,因为他就是都尚的会员啊。迫不及待的小明在超市逛了一圈发现超市里有n件他想要的商品。小明顺便对这n件商品打了分,表示商品的实际价值。小明发现身上带了v1的人民币,会员卡里面有v2的积分。他想知道他最多能买多大价值的商品。
  由于小明想要的商品实在太多了,他算了半天头都疼了也没算出来,所以请你这位聪明的程序员来帮帮他吧。
Input
输入包含多组测试用例。
每组数据的第一行是四个整数n,v1,v2,k;
然后是n行,每行三个整数a,b,val,分别表示每个商品的价钱,兑换所需积分,实际价值。
[Technical Specification]
1 <= n <= 100
0 <= v1, v2 <= 100
0 <= k <= 5
0 <= a, b, val <= 100

Ps. 只要钱或者积分满足购买一件商品的要求,那么就可以买下这件商品。

Output
对于每组数据,输出能买的最大价值。
详细信息见Sample。
Sample Input
5 1 6 1 4 3 3 0 3 2 2 3 3 3 3 2 1 0 2 4 2 5 0 0 1 0 4 4 1 3 3 4 3 4 4
Sample Output
12 4
解题思路:这道题思路还是比较明显,可以用三维背包,dp[i][j][k]表示现金,积分卡,免费拿物品的个数分别为i,j,k时可以获得的最大价值。剩下的就是类似于01背包了。
不过这里要注意当a和b当中存在0的时候要注意,这里坑了我好久。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 105;
struct Node
{int a,b,val;
}goods[maxn];
int n,v1,v2,m,k,dp[maxn][maxn][10];int main()
{while(scanf("%d%d%d%d",&n,&v1,&v2,&m)!=EOF){for(int i = 1; i <= n; i++)scanf("%d%d%d",&goods[i].a,&goods[i].b,&goods[i].val);memset(dp,0,sizeof(dp));for(int i = 1; i <= n; i++)for(int j = v1; j >= 0; j--)for(int k = v2; k >= 0; k--)for(int t = m; t >= 0; t--){if(goods[i].a == 0 || goods[i].b == 0) //这里不能是&&,假如a!=0,b=0,那么dp[j][k][t]可能会算重。dp[j][k][t] += goods[i].val;else{if(j >= goods[i].a)dp[j][k][t] = max(dp[j][k][t],dp[j-goods[i].a][k][t] + goods[i].val);if(k >= goods[i].b)dp[j][k][t] = max(dp[j][k][t],dp[j][k-goods[i].b][t] + goods[i].val);}if(t >= 1)dp[j][k][t] = max(dp[j][k][t],dp[j][k][t-1] + goods[i].val);}int ans = 0;for(int i = 0; i <= v1; i++)for(int j = 0; j <= v2; j++)for(int k = 0; k <= m; k++)ans = max(ans,dp[i][j][k]);printf("%d\n",ans);}return 0;
}

hdu 4501(三维背包问题)相关推荐

  1. hdu 4501 小明系列故事——买年货 多重背包

    小明系列故事--买年货                                                                          Time Limit: 500 ...

  2. HDU 3584 三维树状数组

    三维树状数组模版.优化不动了. #include <set> #include <map> #include <stack> #include <cmath& ...

  3. hdu 1240(三维bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1240 思路:就是一个简单的bfs,但我搞了好久啊,有一个trick一直没注意到,然后第二组数据就一直过 ...

  4. hdu 4501 多维0-1背包

    小明系列故事--买年货 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tota ...

  5. HDU 4501 小明系列故事——买年货

    小明系列故事--买年货 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tota ...

  6. hdu 3236 二维背包

    明天来一发 hdu 4501  算是这题的简化版吧 转载于:https://www.cnblogs.com/cnblogs321114287/p/4853512.html

  7. Python解题 - CSDN周赛第32期 - 运输石油(三维背包)

    上期周赛因为最后一题出现bug,再加上都是经典的模板题,问哥就懒得写题解了. 本期也是有两道考过的题目,不过最后一题因为考到了背包问题的特殊类型,还是值得拿出来记个笔记. 第一题:传奇霸业 传奇霸业, ...

  8. 和项目组研究计算几何

    一,凸包 二维凸包:可用极角排序后每次倍增一个点看是否在栈顶两个点内侧,在内侧就加入栈,否则弹出一个.优化是在省去了计算极角的计算量,采用xy排序,从x最小倍增一遍求上边界,再从x最大反过来求下边界. ...

  9. 腾讯编程马拉松初赛的整理

    为什么要叫做变成马拉松那···?明明是acm嘛,很无力的学习了一下算法知识,结果止步于复赛,本想很快的做一下整理,结果中途赶上清明节LOL大赛,于是乎组了个队去参加,到了比赛地点却因为举办方不利,没有 ...

最新文章

  1. Nature子刊:皮层内脑机接口的主导感
  2. Java8新特性系列(Lambda)
  3. 1.7 matlab矩阵元素的引用(可通过下标和序号引用)
  4. 我的世界 文件保存位置
  5. 简易mysql数据库调优_MySQL数据库简单实用的优化方法
  6. 【pyqt5学习】——下拉框comboBox
  7. java检测用户是否重复登录_Java web工程判断用户是否重复登录
  8. QT中信号与槽的常见使用
  9. Win7下安装Flash低版本
  10. 怎样用springboot开发cs_springboot 系列 springboot 初探
  11. [Node.js]Domain模块
  12. 经济数学线性代数第三版课后习题答案
  13. c语言编程悬臂梁受力分析,悬臂梁受力的分析.doc
  14. oracle序列建同义词,oracle序列创建同义词
  15. cdr怎么算曲线周长_cdr怎么计算图形的周长和面积? cdr图形计算长度和面积的技巧...
  16. 兄弟Brother PT-9200DX 驱动
  17. 为什么你关不掉手机里的广告?
  18. WebDAV之葫芦儿·派盘+人升
  19. Metis异常检测算法率值检测和量值检测源码刨析
  20. guestbook.php注入,php防注入留言板(simple)

热门文章

  1. 喜报!「神策 SA 分析师认证」第三期认证名单正式公布
  2. 关于 To B,我欠粉丝们一个热搜
  3. 桑文锋的数据“长征”
  4. 神策数据助力海尔落地 6 大智慧厨房在线场景
  5. CodeIgniter中Router类的两个方法
  6. 从放弃迅雷和IDM到自己开发下载工具
  7. 11月17日学习内容整理:jquery文档处理,事件细讲,动画
  8. Libvirsh 问题:GLib-WARNING **: gmem.c:483: custom memory allocation vtable not supported
  9. 《Java 7程序设计入门经典》一3.7 for循环
  10. Crontab命令格式