ZOJ 3264 Present for MM
寒假开始了···但是做题没有结束嘤···
然后是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的更多相关文章
- ZOJ 3633 Alice's present 倍增 区间查询最大值
Alice's present Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/vi ...
- 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 ...
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
- mm/swap
/* * linux/mm/swap.c * * Copyright (C) 1991, 1992 Linus Torvalds */ /* * This file should contain ...
- mm/memory
/* * linux/mm/memory.c * * Copyright (C) 1991, 1992 Linus Torvalds */ /* * demand-loading started ...
- ZOJ 3866 - Cylinder Candy
3866 - Cylinder Candy Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu ...
- ZOJ 3080 ChiBi(spfa)
ZOJ Problem Set - 3080 ChiBi Time Limit: 5 Seconds Memory Limit: 32768 KB watashi's mm is so pr ...
- An invalid character [32] was present in the Cookie value 错误
今天在做cookie部分的demo的时候出现了一个错误Servlet部分的代码如下 Date data=new Date(); SimpleDateFormat format=new SimpleDa ...
- 主席树[可持久化线段树](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 ...
随机推荐
- oracle 行转列 分析函数
oracle 行转列 首先看一下源数据: 方法一:WM_CONCAT group by 这个方法没有问题. SELECT CODE_TS, WMSYS.WM_CONCAT(S_NUM + || ':' ...
- 半小时学会上传本地项目到github
半小时学会上传本地项目到github 闲着无聊写给那些正在学习怎么上传本地项目到github的同学. 开始学习 一.创建github账号 好吧,这步多余了. 二.创建个人仓库 三.配置SSH keys ...
- c#3位一分(money)
NumberFormatInfo num = new NumberFormatInfo(); num.NumberDecimalDigits = 2; string ...
- EF当实体模型与数据库的架构不同时要删除数据库时的报错问题
当使用的EF的时候,我们都知道EF当实体模型与数据库的架构不同时要删除数据库,这是会把错: 无法创建与 'master' 数据库之间的连接,这是因为已打开原始数据库连接,并且已从连接字符串中删除凭据. ...
- unity脚本的基础语法
基本的回调方法 Strat()方法:在游戏场景加载时被调用,在该方法内可以写一些游戏场景初始化之类的代码. update():在每一帧渲染之前被调用,大部分游戏代码在这里执行,除了物理部分的代码. F ...
- [原创] zabbix学习之旅一:源码安装
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存 ...
- EL表达式中如何截取字符串
EL表达式中如何截取字符串 可以截取,用fn函数:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/ ...
- Eclipse编辑jsp、js文件时,经常出现卡死现象解决汇总
使用Eclipse编辑jsp.js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲.将所有用过的方法罗列如下: 1.取消验证 windo ...
- The 7th Zhejiang Provincial Collegiate Programming Contest->Problem B:B - Somali Pirates
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3323 题意:去掉字符串里面的数字然后按输入顺序输出 #include< ...
- hdu 4712
看了大牛的解法 第一次知道可以产生随机数解题 在计算hamming距离时用了位运算 很简便 /************************************************* ...