三重背包
来源:互联网 发布:淘宝无法查询物流信息 编辑:程序博客网 时间:2024/04/29 04:39
题目:
hdoj:http://acm.hdu.edu.cn/showproblem.php?pid=4501
思路:
本题有三个容量条件:钱,积分,免费物品。所以要考虑的情况就有很多种,于是要用三重背包来解这个题。
AC代码:
#include<stdio.h>#include<string.h>#define M 110int dp[M][M][M];int max(int a, int b){return a > b? a : b;}int maxn(int a, int b, int c, int d){return max(max(a, b), max(c, d));}main(){int n, v1, v2, k, s1[M], s2[M], s3[M];while(scanf("%d %d %d %d", &n, &v1, &v2, &k) != EOF){memset(dp, 0, sizeof(dp));int cnt = 0, sum = 0;for(int i = 0; i < n; i++){int a, b, c;scanf("%d %d %d", &a, &b, &c);if(a == 0 || b == 0)sum += c;else{s1[cnt] = a, s2[cnt] = b, s3[cnt] = c;cnt++;}}for(int i = 0; i < cnt; i++)for(int j = v1; j >= 0; j--)for(int p = v2; p >= 0; p--)for(int l = k; l >= 0; l--)//三重背包需要4个循环,分别是三个容量和一个物品循环,并取三种状态与初始状态中的最大值{int tmp1 = 0, tmp2 = 0, tmp3 = 0;if(j >= s1[i])tmp1 = dp[j - s1[i]][p][l] + s3[i];if(p >= s2[i])tmp2 = dp[j][p - s2[i]][l] + s3[i];if(l > 0)tmp3 = dp[j][p][l - 1] + s3[i];dp[j][p][l] = maxn(tmp1, tmp2, tmp3, dp[j][p][l]);}printf("%d\n", dp[v1][v2][k] + sum);}}
0 0
- 三重背包
- HDU 4501 三重背包
- hdu 4501 三重背包 易错点
- HDU2159--二维费用背包,三重背包
- 小明系列故事——买年货(三重背包)
- hdu 2191 多重背包 三重循环 w[i]!=V[I];
- HDU4501:小明系列故事——买年货(三重背包)
- HDOJ 题目4501 小明系列故事——买年货(三重背包)
- HDU 4501 小明系列故事——买年货(三重背包)
- HDU 3008 dp打怪血量 三重循环调二维背包或一维
- 三重境界
- 三重门
- 三重缓冲
- 三重缓冲
- PPT的三重境界
- 三重DES加密程序
- [转载] 人生三重境界
- 人生三重境界
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
- 字节流与字符流转换操作
- Podfile的详细配置
- java二维码生成与解析代码实现
- iOS 在UILabel显示不同的字体和颜色
- 三重背包
- BOM之navigator对象
- 用Resteasy实现restful web service
- 采用aidl挂断电话
- 九度:1019<模拟>
- File类的部分常用方法
- C++函数重载详解
- 黑马程序员-第九天(包)
- Java中的Swing