题解:

思路:将v1,v2,k都当作一种体积,开三维dp数组,每种物品只能取一次

代码中的for循环是倒着进行的,知道01背包和完全背包的肯定明白,倒着进行的就代表每种物品只选择一次

代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn=105;
 7 const int INF=0x3f3f3f3f;
 8 int dp[maxn][maxn][6];
 9 struct shudui
10 {
11     int a,b,val;
12 } m[maxn];
13 int main()
14 {
15     int n,v1,v2,k1;
16     while(~scanf("%d%d%d%d",&n,&v1,&v2,&k1))
17     {
18         for(int i=1; i<=n; ++i)
19         {
20             scanf("%d%d%d",&m[i].a,&m[i].b,&m[i].val);
21         }
22         memset(dp,0,sizeof(dp));
23         for(int l=1; l<=n; ++l)
24         {
25             for(int i=v1; i>=0; --i)
26             {
27                 for(int j=v2; j>=0; --j)
28                 {
29                     for(int k=k1; k>=0; --k)
30                     {
31                         int temp=0;
32                         if(i-m[l].a>=0)
33                             temp=max(temp,dp[i-m[l].a][j][k]+m[l].val);
34                         if(j-m[l].b>=0)
35                             temp=max(temp,dp[i][j-m[l].b][k]+m[l].val);
36                         if(k>0)
37                             temp=max(temp,dp[i][j][k-1]+m[l].val);
38                             dp[i][j][k]=max(dp[i][j][k],temp);
39                     }
40                 }
41             }
42         }
43         printf("%d\n",dp[v1][v2][k1]);
44     }
45     return 0;
46 }

View Code

其实感觉多维背包也是一种套路,主要是找到dp的维度

转载于:https://www.cnblogs.com/kongbursi-2292702937/p/11189487.html

hdu4501——小明系列故事——买年货(多维背包)相关推荐

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

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

  2. HDUOJ----4501小明系列故事——买年货(三维背包)

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

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

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

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

    Problem Description 春节将至,小明要去超市购置年货,于是小明去了自己经常去的都尚超市. 刚到超市,小明就发现超市门口聚集一堆人.用白云女士的话说就是:"那家伙,那场面,真 ...

  5. 二维费用 hdu 2159 FATE(完全背包)HDU OJ 4501 小明系列故事——买年货【DP】

    二维费用的背包问题是指:对于每件物品,具有两种不同的费用:选择这件物品必须同时付出这两种代价:对于每种代价都有一个可付出的最大值(背包容量).问怎样选择物品可以得到最大的价值.设这两种代价分别为代价1 ...

  6. hdu-4501-小明系列故事——买年货(四维背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4501 #include<stdio.h> #include<string.h> ...

  7. HDU4506 小明系列故事——师兄帮帮忙

    问题链接:HDU4506 小明系列故事--师兄帮帮忙. 问题描述:参见上述链接. 问题分析:(略). 程序说明:函数powermod()是快速模幂函数. AC的C++语言程序如下: /* HDU450 ...

  8. 杭电4506小明系列故事——师兄帮帮忙

    小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  9. HDU4506 小明系列故事——师兄帮帮忙【水题】

    小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  10. hdu 4506 小明系列故事——师兄帮帮忙

    小明系列故事--师兄帮帮忙 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total ...

最新文章

  1. matlab估计arma残差,写给你的金融时间序列分析:补完篇
  2. Qt入门(10)——调试技术
  3. Bootstrap的handler和childHandler
  4. 中班科学计算机,幼儿园中班科学课件:《照镜子》
  5. Effective C# Item45 : 优先选择强异常安全保证
  6. iOS10 优化APP首次安装网络权限提示方案
  7. Category 中属性的使用
  8. C#中Invoke 和 BeginInvoke 的区别
  9. python3-字符串常用操作
  10. PHP微信多级三级分佣系统,微信三级分销系统微信三级分销系统
  11. STM8S103之串口中断接收
  12. 永洪bi_永洪BI_咨询服务_数据服务_云市场-华为云
  13. STM32精确延迟1us和1ms的函数
  14. win8 性能测试软件,PassMark PerformanceTest(电脑性能测
  15. 彻底解决联想手机数据连接不能上网问题(无需恢复出厂设置) 本文来自移动叔叔论坛 ,详细出处请参考:http://bbs.ydss.cn/thread-201115-1-1.html
  16. 我的世界服务器信息显示等级,我的世界空岛服务器怎么查方块等级 | 手游网游页游攻略大全...
  17. 跟狗屎一样的代码,到底该如何重构?
  18. Human Pose Estimation姿态估计调研
  19. 论文阅读:(arXiv 2021)Beyond Periodicity: Towards a Unifying Framework for Activations in Coordinate-MLP
  20. Python 虚拟环境迁移

热门文章

  1. IDEA运行main,junit方法报错Class not found
  2. 网站安全之存储型跨站脚本编制
  3. Java线程状态转换
  4. Struts2标签库(三)之表单标签
  5. centos 7 x86_64上安装staruml2.8.0
  6. 青蛙学Linux—CentOS 6.10的安装
  7. 修改tomcat的8080端口
  8. vue个人学习(三)----组件
  9. 容器技术学习系列文章总目录
  10. 常用DOS下MSC指令