hdu 3720 Arranging Your Team 枚举
不可能解可以直接判断。
搭配产生的附加分可以用一个二维数组保存。
枚举1442,4种类型的人,因为总人数只有23个,所以可以搜索暴力枚举,然后保存最优解。
注意trick,答案可能为负数,所以初始化ans不能为0.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#define maxn 1005
#define MAXN 100005
#define mod 1000000007
#define INF 0x3f3f3f3f
using namespace std; typedef long long ll;
char name[100];
char type[100];
int power[30];
int maps[30][30];
map<string,int> mt;
map<string,int> na;
int mp[30];
vector<int> player[4];
vector<int> ans;
int ANS;
void dfs2(int pos,int sum);
void dfs3(int pos,int sum);
void dfs4(int pos,int sum); void dfs1(int pos,int sum)
{
if(sum==1) {dfs2(-1,0);return;}
for(int i=pos+1;i<player[0].size();i++)
{
ans.push_back(player[0][i]);
dfs1(i,sum+1);
ans.pop_back();
}
}
void dfs2(int pos,int sum)
{
if(sum==4) {dfs3(-1,0);return;}
for(int i=pos+1;i<player[1].size();i++)
{
ans.push_back(player[1][i]);
dfs2(i,sum+1);
ans.pop_back();
}
}
void dfs3(int pos,int sum)
{
if(sum==4) {dfs4(-1,0);return;}
for(int i=pos+1;i<player[2].size();i++)
{
ans.push_back(player[2][i]);
dfs3(i,sum+1);
ans.pop_back();
}
}
void dfs4(int pos,int sum)
{
if(sum==2)
{
int s=0;
for(int i=0;i<ans.size();i++)
{
for(int j=i+1;j<ans.size();j++)
{
s+=maps[ans[i]][ans[j]];
}
s+=power[ans[i]];
}
ANS=max(s,ANS);
return;
}
for(int i=pos+1;i<player[3].size();i++)
{
ans.push_back(player[3][i]);
dfs4(i,sum+1);
ans.pop_back();
}
}
int main()
{
mt["goalkeeper"]=0;
mt["defender"]=1;
mt["midfielder"]=2;
mt["striker"]=3;
int p;
while(cin>>name)
{
ANS=-0x3f3f3f3f;
ans.clear();
na.clear();
for(int i=0;i<4;i++) player[i].clear(); cin>>p>>type;
player[mt[type]].push_back(1);
power[1]=p; na[name]=1;
for(int i=2;i<=23;i++)
{
cin>>name>>p>>type;
na[name]=i;
player[mt[type]].push_back(i);
power[i]=p;
}
int n;
memset(maps,0,sizeof(maps));
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>name>>type>>p;
maps[na[name]][na[type]]=p;
maps[na[type]][na[name]]=p;
} if(player[0].size()<1||player[1].size()<4||player[2].size()<4||player[3].size()<2)
{
cout<<"impossible"<<endl;
continue;
}
dfs1(-1,0);
cout<<ANS<<endl;
}
return 0;
}
hdu 3720 Arranging Your Team 枚举的更多相关文章
- HDU 3720 Arranging Your Team
先分组,然后暴力:注意 初始化时不要为0 会有负数:我直接二进制枚举: dfs是正解:呵呵 #include <iostream> #include <cstdio> #in ...
- HDU 3720 Arranging Your Team(DFS)
题目链接 队内赛里,匆匆忙忙写的. #include <cstdio> #include <cstring> #include <iostream> #includ ...
- hdu3720 Arranging Your Team
Arranging Your Team Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Arranging Your Team HDU - 3720 【DFS】
思路 题意:此题大意是指首先给你23个队员的信息,包括他们的名字,能力值,在赛场上的职位.然后给出几个若能满足某两个队员同时在球场上就额外加上一定的值.最后让你从23个队员中选出11个人,使得最终的v ...
- HDU 3720 深搜 枚举
DES:从23个队员中选出4—4—2—1共4种11人来组成比赛队伍.给出每个人对每个职位的能力值.给出m组人在一起时会产生的附加效果.问你整场比赛人员的能力和最高是多少. 用深搜暴力枚举每种类型的人选 ...
- HDU 5752 Sqrt Bo【枚举,大水题】
Sqrt Bo Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total S ...
- HDU 4763 Theme Section(KMP+枚举公共前后缀)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4763 题目大意: 给你一个字符串s,存在一个子串E同时出现在前缀.中间.后缀,即EAEBE这种模式,A ...
- hdu - 5128 The E-pang Palace(枚举+计算几何)
http://acm.hdu.edu.cn/showproblem.php?pid=5128 给出n个点,求n个点组成两个矩形的最大面积. 矩形必须平行x轴,并且不能相交,但是小矩形在大矩形内部是可以 ...
- HDU 5303 Delicious Apples (贪心 枚举 好题)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
随机推荐
- ruby 中文支持设置
学习Ruby的过程中,对于于涉及中文的的代码的时候,需要添加如下代码在首行 # encoding: utf-8 或者EMAC写法 # -*- coding : utf-8 -*- 因为Ruby编译器会 ...
- 关于PowerDesigner
1. PowerDesigner将所有的小写改为大写:Tools->Model Option->左侧菜单中“Naming conversion”->Column->Code – ...
- PHPStorm——配置修改
字体修改: FiraCode字体:https://github.com/tonsky/FiraCode 1.双击安装字体 2. 关闭错别字检测
- iOS 宏定义_16进制色值转化为RGB返回UIColor类型对象
// 十六进制颜色 #define COLOR_WITH_HEX(hexValue) [UIColor colorWithRed:((float)((hexValue & 0xFF0000) ...
- codeforces C. No to Palindromes!
http://codeforces.com/contest/465/problem/C 题意:给你一个字符串,然后按照字典序找出下一个字符串,这个字符串中不能含有长度大于等于2的子串为回文串,如果含有 ...
- Java随机数
本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 广义上讲,Java中的随机数的有三种产生方式:(01). 通过System.currentTimeMillis()来获取一个当前时间 ...
- jstat命令(Java Virtual Machine Statistics Monitoring Tool)
1.介绍 Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控: - 类的加载及卸载情况 - 查看新生代.老生代及持久代 ...
- [置顶] linux内核启动2-setup_arch中的内存初始化(目前分析高端内存)
上一篇微博留下了这几个函数,现在我们来分析它们 sanity_check_meminfo(); arm_memblock_init(&meminfo, mdes ...
- 分布式文件系统MFS(moosefs)实现存储共享(一)
分布式文件系统MFS(moosefs)实现存储共享 作者:田逸(sery@163.com) from:[url]http://net.it168.com/a2009/0403/270/00000027 ...
- BZOJ3039: 玉蟾宫&wikioi2491 玉蟾宫
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 430 Solved: 265[Submit][Status] Descriptio ...