思路

题意:此题大意是指首先给你23个队员的信息,包括他们的名字,能力值,在赛场上的职位。然后给出几个若能满足某两个队员同时在球场上就额外加上一定的值。最后让你从23个队员中选出11个人,使得最终的value最大。

具体思路:由于从样例中可以发现字符串比较多,加之需要进行姓名和姓名、score之间关系的记录,这就用到了map。利用dfs对所有队员进行遍历,具体说明在代码中指出。

AC代码

//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
map<string, int> id;
map<string, int> manid;
int def = 4, mid = 4, str = 2, goal = 1;
int sum[6], M, asso[24][24];
int vis[24];
int maxs = 0;
struct Men
{
int value, pos;
};
Men man[24];
void init()
{
string s = "defender";
id[s] = 1;
s = "midfielder";
id[s] = 2;
s = "striker";
id[s] = 3;
s = "goalkeeper";
id[s] = 4;
}
void dfs(int last, int d, int m, int s, int g) //d, m, s, g分别指defenders, midfielders, strikers, goalkeeper,last可以避免重复
{
if(d == 4 && m == 4 && s == 2 && g == 1) //满足条件时
{
int cnt = 0;
for(int i = 0; i < 23; i++)
{
if(vis[i])
{
cnt += man[i].value;
for(int j = i + 1; j < 23; j++)
{
if(vis[j])
{
cnt += asso[i+1][j+1];
}
}
}
}
maxs = max(maxs, cnt); //不断记录所有情况,最后得到最大值
return ;
}
for(int i = last; i < 23; i++)
{
if(vis[i])
continue;
if(man[i].pos == 1 && d >= 4) continue;
if(man[i].pos == 2 && m >= 4) continue;
if(man[i].pos == 3 && s >= 2) continue;
if(man[i].pos == 4 && g >= 1) continue;
vis[i] = 1;
if(man[i].pos == 1)
dfs(i, d+1, m, s, g);
else if(man[i].pos == 2)
dfs(i, d, m+1, s, g);
else if(man[i].pos == 3)
dfs(i, d, m, s+1, g);
else if(man[i].pos == 4)
dfs(i, d, m, s, g+1);
vis[i] = 0;
}
}
int main()
{
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
init();
string na, p;
int v;
while(cin >> na )
{
cin >> v >> p;
manid.clear();
man[0].value = v;
manid[na] = 1;
man[0].pos = id[p];
memset(sum, 0, sizeof(sum));
sum[id[p]] ++;
for(int i = 1; i < 23; i++)
{
cin >> na >> v >> p;
manid[na] = i + 1;
man[i].value = v;
man[i].pos = id[p];
sum[id[p]] ++;
}
cin >> M;
memset(asso, 0, sizeof(asso));
for(int i = 0; i < M; i++)
{
string s1, s2;
int s;
cin >> s1 >> s2 >> s;
asso[manid[s1]][manid[s2]] = s; //记录s1, s2同时存在时的score值
asso[manid[s2]][manid[s1]] = s;
}
if(sum[1] < 4 || sum[2] < 4 || sum[3] < 2 || sum[4] < 1)
{
cout << "impossible" << endl;
continue;
}
memset(vis, 0, sizeof(vis));
maxs = -0x7ffffff;
dfs(0, 0, 0, 0, 0);
cout << maxs << endl;
} }

Arranging Your Team HDU - 3720 【DFS】的更多相关文章

  1. HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))

    度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】

    目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...

  3. Kattis - glitchbot 【DFS】

    Kattis - glitchbot [DFS] 题意 有一个机器人 刚开始在(0, 0),然后给出一个目标点,并且会给出一系列指令,但是其中会有一个指令是错误的.我们需要找出那个指令,并且改成正确的 ...

  4. How far away ? HDU - 2586 【LCA】【RMQ】【java】

    题目大意:求树上任意两点距离. 思路: dis[i]表示i到根的距离(手动选根),则u.v的距离=dis[u]+dis[v]-2*dis[lca(u,v)]. lca:u~v的dfs序列区间里,深度最 ...

  5. 【dfs】P1331 海战

    题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...

  6. 【dfs】p1731 生日蛋糕

    1441:[例题2]生日蛋搞 [题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.设从下往上数第i(1≤i≤M)层蛋糕是半径为Ri, 高 ...

  7. 【dfs】LETTERS

    1212:LETTERS [题目描述] 给出一个roe×colroe×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母.问最多可以经过几个字母. [ ...

  8. 洛谷P1605 迷宫【dfs】

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  9. 【dfs】BZOJ1703-[Usaco2007 Mar]Ranking the Cows 奶牛排名

    [题目大意] 农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序,约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他 ...

随机推荐

  1. ServiceFabric极简文档-4.0 开发环境搭建

    1. VS2017安装包启动页,安装Azure.(安装的VS的Tool)2. 下载Service Fabric Web PI,安装Service Fabric(自动安装SDK与Runtime)

  2. 如何入门 MySQL

    如何入门MySQL 前言: 关于如何入门MySQL,后台有好多同学咨询我,可能部分读者刚开始学习MySQL,我前面发的文章对部分同学来说暂时接触不到.原本写技术文章的目的是记录自己的工作学习,没有考虑 ...

  3. Java 类加载之匿名类和主类相互依赖问题

    Qestion /** * ClassInitializedOrder for : Java Classload Order Test * * @author <a href="mai ...

  4. 个人永久性免费-Excel催化剂功能第87波-将批量发送邮件做到极致化,需借力Outlook

    在过往的功能中,已经实现过批量发送邮件的功能,但收到的反馈是部分企业邮箱不能用,原因是无解的,因为程序员能找到的公开的类库只能实现一些通用性的场景,太复杂的企业环境可能会失灵.近期认真来学习Outlo ...

  5. 将Ueditor文件上传至OSS

    前人已经将ueditor集成了oss,本次是作为记录 1:点击到下载页面 下载并按照文档安装 2:将 com.zip(在UEditor-for-aliyun-OSS-master\ueditor\sr ...

  6. 网络框架,互联网的组成,OSI七层协议,抽象层

    6.25自我总结 1.网络框架 1.单机 单机游戏 以下两个基于网络的 2.CS架构 cs--->client客户/server服务 服务端(应用程序)一个就够了,客户端(应用程序)可以有多个 ...

  7. JAVA面试题 请谈谈你对Sychronized关键字的理解?

    面试官:sychronized关键字有哪些特性? 应聘者: 可以用来修饰方法; 可以用来修饰代码块; 可以用来修饰静态方法; 可以保证线程安全; 支持锁的重入; sychronized使用不当导致死锁 ...

  8. ASP.NET Core 中的管道机制

    首先,很感谢在上篇文章 C# 管道式编程 中给我有小额捐助和点赞的朋友们,感谢你们的支持与肯定.希望我的每一次分享都能让彼此获得一些收获,当然如果我有些地方叙述的不正确或不当,还请不客气的指出.好了, ...

  9. 第一次使用cnblog,希望大佬们多多指教

    我目前在学习ML和DeepLearning,在这里和大家共同成长

  10. sql server还原数据库(请选择用于还原的备份集)

    还原数据库的时候明明选择了备份集,还是提示未选择还原的备份集 后来查了下,是因为我本地有两个数据库(2008R2和2014),对应的两个数据库实例.而还原bak是sqlserver2014的备份,我默 ...