ZOJ 3264 Present for MM
来源:互联网 发布:灵剑卡刀宏数据2017 编辑:程序博客网 时间:2024/05/05 04:21
寒假开始了···但是做题没有结束嘤···
然后是dp专场嘤···
题意:背包问题,给出背包容量和物品对数,每对物品都有特殊的关系:第一种关系是两个物品都取有价值,若只取一个则失去价值;第二种是两个物品只能取一个,都取则失去价值;第三种是只有当第一个被取时第二个才能被取,但可以单独取第一个物品。
解法:第一种关系只要将两个物品看做一个物品就可以了,第二种关系是分组背包,第三种关系是有依赖背包,可以抽象为含有两个物品(第一个物品,第一个物品+第二个物品)的分组背包。最后都可以看做是分组背包。
这题就坑在物品的w可以为0···嘤嘤嘤···
代码:
#include<stdio.h>#include<iostream>#include<algorithm>#include<string>#include<string.h>#include<math.h>#include<map>#include<queue>#include<set>#include<stack>#include<vector>#define LL long longusing namespace std;struct node{ int w, v; node(int a, int b) { w = a; v = b; } node() {}};vector <node> tre[10005];int dp[50005];int main(){ int w, n; while(~scanf("%d%d", &w, &n)) { for(int i = 0; i < 10005; i++) tre[i].clear(); memset(dp, 0, sizeof(dp)); w /= 100; int cnt = 0; for(int i = 0; i < n; i++) { int w1, v1, w2, v2, r; scanf("%d%d%d%d%d", &w1, &v1, &w2, &v2, &r); w1 /= 100; w2 /= 100; if(r == 1)//合并成一个物品 tre[cnt++].push_back(node(w1 + w2, v1 + v2)); else if(r == 2)//分组背包 { tre[cnt].push_back(node(w1, v1)); tre[cnt++].push_back(node(w2, v2)); } else//抽象成分组背包 { tre[cnt].push_back(node(w1, v1)); tre[cnt++].push_back(node(w1 + w2, v1 + v2)); } } for(int i = 0; i < cnt; i++)//组 for(int j = w; j >= 0; j--) { int ret = -1;//一组内每个物品在容量为j时获得价值的最大值,因为物品的w可以为0,所以不能用dp数组直接求 for(int k = 0; k < tre[i].size(); k++)//每组的物品 if(j >= tre[i][k].w) ret = max(ret, (dp[j - tre[i][k].w] + tre[i][k].v)); dp[j] = max(dp[j], ret); } int ans = 0; for(int i = 0; i <= w; i++) ans = max(ans, dp[i]); printf("%d\n", ans); } return 0;}
0 0
- ZOJ 3264 Present for MM
- ZOJ-3264 Present for MM (背包dp)
- zoj 3264 Present for MM (坑题,写博客只是不想更多人被坑)
- ZJU 3357 Present for MM 【活用背包算法】
- ZOJ 3633 Alice's present
- ZOJ-3633-Alice's present
- zoj 3633 Alice's present
- Zoj 3633 Alice's present
- zoj 3633 Alice's present
- ZOJ 3633 Alice's present
- ZOJ 3633Alice's present
- zoj 3633 Alice's present
- zoj 3633 Alice's present
- ZOJ-3633-Alice's present
- zoj 3633 Alice's present 线段树
- zoj(3633)Alice‘s present
- ZOJ 3633 Alice's present【线段树】
- ZOJ 3633Alice's present (脑洞题)
- ITFriend创业败局(一):选择创业方向和寻找合伙人,创业失败的2个关键点
- HDU2535 Vote【水题】
- 模板基础用法
- 【Java网络】Socket 单一
- uva 103 Stacking Boxes(LIS)
- ZOJ 3264 Present for MM
- 如何下载最新电影高清资源?
- ISOUI控件--创建画板,UIView,UILable,UITextField,UIButton基本属性
- 汇编编程模型
- mysql优化视图
- 按钮设置样例
- ExtJs使用总结
- error C2065: '_T' : undeclared identifier
- “が”和“は”的用法辨析