http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3769

题意:
有13种装备,每种装备值可以穿戴一种,特殊的就是双手武器和单手武器,双手武器和单手武器+盾只能选择一种,戒指可以双手各戴一个。每个装备都有一个攻击值和防御值,现在要在防御值至少到达m的情况下可以达到的最大攻击力。

思路:
分组背包题目。

把单手武器和盾组合起来放到双手武器当中,戒指也需要两两组合。

接下来就是一个分组背包了,比较重要的是这道题目需要开二维数组,因为题目要求的是至少要达到m的容量,如果超过了m容量,就需要按m来算。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn = + ; int n,m;
int d[][];
vector<pll> v[];
map<string,int> ID; void init()
{
ID["Head"] = ; ID["Shoulder"] = ; ID["Neck"] = ;
ID["Torso"] = ; ID["Hand"] = ; ID["Wrist"] = ;
ID["Waist"] = ; ID["Legs"] = ; ID["Feet"] = ;
ID["Finger"] = ; ID["Shield"] = ; ID["Weapon"] = ;
ID["Two-Handed"] = ;
} bool cmp(const vector<pll> a, const vector<pll> b)
{
return a.size()>b.size();
} int main()
{
//freopen("in.txt","r",stdin);
init();
int T;
scanf("%d",&T);
while(T--)
{
for(int i=;i<;i++) v[i].clear(); scanf("%d%d",&n,&m);
for(int i=;i<n;i++)
{
int D,T; string s;
cin>>s>>D>>T;
v[ID[s]].push_back(make_pair(D,T));
if(ID[s]== || ID[s]==) v[].push_back(make_pair(D,T));
} //合并单手武器和盾牌
for(int i=;i<v[].size();i++)
{
for(int j=;j<v[].size();j++)
{
v[].push_back(make_pair(v[][i].first+v[][j].first,v[][i].second+v[][j].second));
}
} v[].clear();
v[].clear(); //合并戒指并且储存在v[10]中
int len=v[].size();
for(int i=;i<len;i++)
{
for(int j=i+;j<len;j++)
{
v[].push_back(make_pair(v[][i].first+v[][j].first,v[][i].second+v[][j].second));
}
} memset(d,-,sizeof(d));
sort(v+,v+,cmp); d[][]=;
for(int i=;i<=;i++)
{
for(int j=;j<=m;j++)
{
d[i][j]=max(d[i][j],d[i-][j]); //第i组的状态有第i-1组状态而来
if(d[i-][j]==-) continue;
for(int k=;k<v[i].size();k++)
{
int tmp=min(v[i][k].second+j,m); //如果容量超过了m,那么就按m来算
d[i][tmp]=max(d[i][tmp],d[i-][j]+v[i][k].first); //由第i-1组更新
}
}
}
printf("%d\n",d[][m]);
}
return ;
}

ZOJ 3769 Diablo III(分组背包)的更多相关文章

  1. ZOJ 3769 Diablo III

    描述 Diablo III is an action role-playing video game. A few days ago, Reaper of Souls (ROS), the new e ...

  2. 转化为分组背包 zoj 3769

    题目链接:https://vjudge.net/problem/ZOJ-3769 题意:现在你要去打怪,你有13种装备,每件装备会有伤害和防御两种属性,一般来说,每种装备只可以装备一件,但是特别的,戒 ...

  3. 2018.12.14 codeforces 922E. Birds(分组背包)

    传送门 蒟蒻净做些水题还请大佬见谅 没错这又是个一眼的分组背包. 题意简述:有n棵树,每只树上有aia_iai​只鸟,第iii棵树买一只鸟要花cic_ici​的钱,每买一只鸟可以奖励bbb块钱,从一棵 ...

  4. 2018.10.19 NOIP训练 游戏问题(分组背包)

    传送门 分组背包经典问题. 令f[i][j]f[i][j]f[i][j]表示前iii组花费为jjj的最优值. g[i][j]g[i][j]g[i][j]表示前iii组,第iii组已经支付了平台费用的最 ...

  5. HDU 1712 ACboy needs your help(分组背包)

    题意:给你n的课程组,每个课程组有m个课程,每个课程有一个完成时间与价值.问在m天内每组课程组最多选择一个,这样可以得到的最大价值是多少 题解:分组背包,其实就是每个课程组进行01背包,再在课程组内部 ...

  6. Codeforces Round #383 (Div. 2) D 分组背包

    给出一群女孩的重量和颜值 和她们的朋友关系 现在有一个舞台 ab是朋友 bc是朋友 ac就是朋友 给出最大承重 可以邀请这些女孩来玩 对于每一个朋友团体 全邀请or邀请一个or不邀请 问能邀请的女孩的 ...

  7. HDU 3033 分组背包变形(每种至少一个)

    I love sneakers! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. HDU 1712 分组背包

    ACboy needs your help Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  9. Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(分组背包+dsu)

    D. Arpa's weak amphitheater and Mehrdad's valuable Hoses Problem Description: Mehrdad wants to invit ...

随机推荐

  1. C# 文件夹的常用操作

    C#获取文件夹下的所有文件的文件名 string path = @"E:\微课视频大于200M"; DirectoryInfo folder = new DirectoryInfo ...

  2. 封装自己的getClassName函数

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. jconsole远程连接超时问题解决方法

    根据oracle网站上的文档,本地使用jconsole没有问题.但当我从windows连接到linux时(centos5.4)时,老是连接不上). 原因是Linux上JVM给jconsole的RMI配 ...

  4. 南京网络赛B-The writing on the wall

    30.43% 2000ms 262144K Feeling hungry, a cute hamster decides to order some take-away food (like frie ...

  5. c# 公共方法

    MyMeans using System; using System.Collections.Generic; using System.Text; using System.Windows.Form ...

  6. CentOS安装Nginx-1.6.2+安全配置+性能配置

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 在安装Nginx之前,请确保已经使用yum安装了pcre等基础组件,具体见<CentOS安装LNMP环境的基础 ...

  7. Django框架【基础篇】

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  8. HTTP返回码中301与302的区别(转)

    add by zhj:  区别 1.使用效果不同 302跳转是暂时的跳转,搜索引擎会抓取新的内容而保留旧的网址.因为服务器返回302代码,搜索引擎认为新的网址只是暂时的. 301重定向是永久的重定向, ...

  9. 002-and design-dva.js 知识导图-01JavaScript 语言,React Component

    一.概述 参看:https://github.com/dvajs/dva-knowledgemap react 或 dva 时会不会有这样的疑惑: es6 特性那么多,我需要全部学会吗? react ...

  10. Django之logging日志使用

    Logger模块 是python中用于便捷记录日志且线程安全的模块 使用logging模块记录日志涉及四个主要类: logger提供了应用程序可以直接使用的接口: handler将(logger创建的 ...