寒假开始了···但是做题没有结束嘤···

然后是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 long
using 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);
}
printf("%d\n", dp[w]);
}
return 0;
}

  

ZOJ 3264 Present for MM的更多相关文章

  1. ZOJ 3633 Alice's present 倍增 区间查询最大值

    Alice's present Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/vi ...

  2. ZOJ 3633 Alice's present RMQ

     Alice's present Description As a doll master, Alice owns a wide range of dolls, and each of them ha ...

  3. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

  4. mm/swap

    /* *  linux/mm/swap.c * *  Copyright (C) 1991, 1992  Linus Torvalds */ /* * This file should contain ...

  5. mm/memory

    /* *  linux/mm/memory.c * *  Copyright (C) 1991, 1992  Linus Torvalds */ /* * demand-loading started ...

  6. ZOJ 3866 - Cylinder Candy

    3866 - Cylinder Candy Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu ...

  7. ZOJ 3080 ChiBi(spfa)

    ZOJ Problem Set - 3080 ChiBi Time Limit: 5 Seconds      Memory Limit: 32768 KB watashi's mm is so pr ...

  8. An invalid character [32] was present in the Cookie value 错误

    今天在做cookie部分的demo的时候出现了一个错误Servlet部分的代码如下 Date data=new Date(); SimpleDateFormat format=new SimpleDa ...

  9. 主席树[可持久化线段树](hdu 2665 Kth number、SP 10628 Count on a tree、ZOJ 2112 Dynamic Rankings、codeforces 813E Army Creation、codeforces960F:Pathwalks )

    在今天三黑(恶意评分刷上去的那种)两紫的智推中,突然出现了P3834 [模板]可持久化线段树 1(主席树)就突然有了不详的预感2333 果然...然后我gg了!被大佬虐了! hdu 2665 Kth ...

随机推荐

  1. java开发命名规范总结

    一 包名的书写规范 (Package)推荐使用公司或机构的顶级域名为包名的前缀,目的是保证各公司/机构内所使用的包名的唯一性.包名全部为小写字母,且具有实际的区分意义. 1.1 一般要求1.选择有意义 ...

  2. 正则表达式通过Unicode属性匹配

    原文链接:http://zochen.iteye.com/blog/690716 Unicode 编码并不只是为某个字符简单定义了一个编码,而且还将其进行了归类. \pP 其中的小写 p 是 prop ...

  3. 15个带示例的jQuery滚动条插件

    1.NiceScroll:可用于桌面.移动与触摸设备的jQuery滚动插件 NiceScroll是一个jQuery插件(since 1.5),它有着类似于ios/移动设备的样式.它支持Div.iFra ...

  4. 【斜率DP】BZOJ 3675:[Apio2014]序列分割

    3675: [Apio2014]序列分割 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 1066  Solved: 427[Submit][Statu ...

  5. Ehcache详细解读(转载)

    Ehcache 是现在最流行的纯Java开源缓存框架,配置简单.结构清晰.功能强大,最初知道它,是从Hibernate的缓存开始的.网上中文的EhCache材料以简单介绍和配置方法居多,如果你有这方面 ...

  6. kafka.network.AbstractServerThread中的线程协作机制

    这个虚类是kafka.network.Acceptor和kafka.network.Processor的父类,提供了一个抽象的Sever线程. 它的有趣之处在于为子类的启动和停止提供了线程间的协作机制 ...

  7. pythn BeautifulSoup

    http://rsj217.diandian.com/post/2012-11-01/40041235132 Beautiful Soup 是用 Python 写的一个 HTML/XML 的解析器,它 ...

  8. NODE.JS的基本系统模块操作样例

    就练练手, 嘿嘿,说不定,写服务器脚本也可以哟. console.log('Currently executing file is ' + __filename); console.log('It i ...

  9. codeforces #309 div1 D

    求最小值最大显然是要二分 二分之后转换成了判定性问题 我们考虑哪些点一定不能选 显然是将所有可选点选中之后依然不满足条件的点不能选 那么我们不妨维护一个堆,每次取出堆顶看看是否满足条件 不满足条件就p ...

  10. [itint5]合并K个有序链表

    merge sort,leet code里面曾经做过.但一开始没这么写,遍历来做,效率n*k了,用了merge sort后,变成logn*k. 用了dummy node.同时要注意size为0的情况. ...