先分组,然后暴力;注意  初始化时不要为0 会有负数;我直接二进制枚举; dfs是正解;呵呵

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
using namespace std; int arr[][];
map<string,int>mp;
char str[],cha[];
struct date{
int val,i;
bool operator < ( const date &a )const {
if( a.val != val )return a.val < val;
return a.i < i;
}
};
vector<date>v[];
vector<date>s[];
char sss[][] = {"","goalkeeper","defender","midfielder","striker"};
int main( )
{
int num;
while( scanf("%s%d%s",str,&num,cha) != EOF )
{
mp.clear(); memset( arr,,sizeof(arr) );
for( int i = ; i < ; i++ )v[i].clear();
for( int i = ; i < ; i++ )s[i].clear();
mp[str] = ; date temp; temp.val = num; temp.i = ;
for( int i = ; i <= ; i++ )
if( strcmp(cha,sss[i]) == ) v[i].push_back(temp);
for( int i = ; i <= ; i++ )
{
scanf("%s%d%s",str,&num,cha); mp[str] = i;
date temp; temp.val = num; temp.i = i;
for( int j = ; j <= ; j++ )
if( strcmp(cha,sss[j]) == )v[j].push_back(temp);
}
int now; cin>>now;
while( now-- )
{
cin>>str>>cha>>num; arr[mp[str]][mp[cha]] = arr[mp[cha]][mp[str]] = num;
}//cout<<v[1].size()<<" "<<v[2].size()<<" "<<v[3].size()<<" "<<v[4].size()<<endl;
if( v[].size() < || v[].size() < || v[].size() < || v[].size() < )
{
cout<<"impossible"<<endl;
continue;
}
for( int i = ; i < v[].size(); i++ )
{
date temp; temp = v[][i]; temp.i = <<(temp.i-);
s[].push_back( temp );
}
for( int i = ; i < v[].size(); i++ )
for( int j = i+; j < v[].size(); j++ )
for( int k = j+; k < v[].size(); k++ )
for( int l = k+; l < v[].size(); l++ )
{
int ans = ; int val = ;
date temp; temp = v[][i]; ans += (<<(temp.i-));val += temp.val;
temp = v[][j]; ans += (<<(temp.i-));val += temp.val;
temp = v[][k]; ans += (<<(temp.i-));val += temp.val;
temp = v[][l]; ans += (<<(temp.i-));val += temp.val;
temp.val = val; temp.i = ans;
s[].push_back(temp);
}
for( int i = ; i < v[].size(); i++ )
for( int j = i+; j < v[].size(); j++ )
for( int k = j+; k < v[].size(); k++ )
for( int l = k+; l < v[].size(); l++ )
{
int ans = ; int val = ;
date temp; temp = v[][i]; ans += (<<(temp.i-));val += temp.val;
temp = v[][j]; ans += (<<(temp.i-));val += temp.val;
temp = v[][k]; ans += (<<(temp.i-));val += temp.val;
temp = v[][l]; ans += (<<(temp.i-));val += temp.val;
temp.val = val; temp.i = ans;
s[].push_back(temp);
}
for( int i = ; i < v[].size(); i++ )
for( int j = i+; j < v[].size(); j++ )
{
int ans = ; int val = ;
date temp; temp = v[][i]; ans += (<<(temp.i-));val += temp.val;
temp = v[][j]; ans += (<<(temp.i-));val += temp.val;
temp.val = val; temp.i = ans;
s[].push_back(temp);
}
int Max = (<<)*-;
for( int i = ; i < s[].size(); i++ )
for( int j = ; j < s[].size(); j++ )
for( int k = ; k < s[].size(); k++ )
for( int l = ; l < s[].size(); l++ )
{
int ans = s[][i].i+s[][j].i+s[][k].i+s[][l].i;
int val = s[][i].val+s[][j].val+s[][k].val+s[][l].val;
vector<int>n; n.clear();
for( int t = ; t < ; t++ )
if( ans&(<<t) )n.push_back(t+);
for( int x = ; x < n.size(); x++ )
for( int y = x+; y < n.size(); y++ )
val += arr[n[x]][n[y]];
Max = max( Max,val );
}
cout<<Max<<endl;
}
return ;
}

HDU 3720 Arranging Your Team的更多相关文章

  1. HDU 3720 Arranging Your Team(DFS)

    题目链接 队内赛里,匆匆忙忙写的. #include <cstdio> #include <cstring> #include <iostream> #includ ...

  2. hdu 3720 Arranging Your Team 枚举

    不可能解可以直接判断. 搭配产生的附加分可以用一个二维数组保存. 枚举1442,4种类型的人,因为总人数只有23个,所以可以搜索暴力枚举,然后保存最优解. 注意trick,答案可能为负数,所以初始化a ...

  3. hdu3720 Arranging Your Team

    Arranging Your Team Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  4. Arranging Your Team HDU - 3720 【DFS】

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

  5. HDU 3720 深搜 枚举

    DES:从23个队员中选出4—4—2—1共4种11人来组成比赛队伍.给出每个人对每个职位的能力值.给出m组人在一起时会产生的附加效果.问你整场比赛人员的能力和最高是多少. 用深搜暴力枚举每种类型的人选 ...

  6. Arranging Your Team

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=35800#problem/D #include <iostream> #inc ...

  7. 2017 Multi-University Training Contest - Team 9 1005&&HDU 6165 FFF at Valentine【强联通缩点+拓扑排序】

    FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. 2017 Multi-University Training Contest - Team 9 1004&&HDU 6164 Dying Light【数学+模拟】

    Dying Light Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  9. 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】

    CSGO Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

随机推荐

  1. netty应用

    http://www.blogjava.net/yongboy/archive/2013/05/13/399203.html http://shentar.me/tag/netty-2/ 代理 htt ...

  2. spring boot Rabbitmq集成,延时消息队列实现

    本篇主要记录Spring boot 集成Rabbitmq,分为两部分, 第一部分为创建普通消息队列, 第二部分为延时消息队列实现: spring boot提供对mq消息队列支持amqp相关包,引入即可 ...

  3. Java并发之CyclicBarria的使用(二)

    Java并发之CyclicBarria的使用(二) 一.简介 之前借助于其他大神写过一篇关于CyclicBarria用法的博文,但是内心总是感觉丝丝的愧疚,因为笔者喜欢原创,而不喜欢去转载一些其他的文 ...

  4. AngularJS post传值后台获取不到

    AngularJS post传值后台获取不到 一般的思路: 解决办法: 1.设置一下default head  2.参数转换一下data:$.param({orderNo: orderNo,sessi ...

  5. initrd.img的压缩(制作)及解压的过程

    一.启动镜像initrd.img 文件类RedHat 系统从vmlinuz 核心引导后,会读取initrd.img 启动镜像.该文件中包含驱动模块等信息,是非常重要的文件.不同版本使用的格式不同.1. ...

  6. Linux下SSH中配置说明

    SSH 协议:安全外壳协议.为 Secure Shell 的缩写.SSH 为建立在应用层和传输层基础上的安全协议. sshd服务使用SSH协议可以用来进行远程控制,或在计算机之间传送文件.而实现此功能 ...

  7. 掌握这个Python小技巧,轻松构建cytoscape导入文件

    今天小编和大家分享如何借助Python脚本轻松构建cytoscape导入文件.Cytoscape是一个非常适合展示各种相互作用关系的可视化软件. 具体来说就是可以用于蛋白互作网络的展示,miRNA与蛋 ...

  8. Spring_自动装配

    Beans-autowire.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns=& ...

  9. RBAC权限控制

    1.什么是RBAC权限模型rity2.RBAC权限模型表设计3.整合Mybatis数据库4.UserDetailsService5.动态查询数据库登陆6.动态权限角色拦截 什么是RBAC权限模型r 基 ...

  10. 并发-CopyOnWrite源码分析

    CopyOnWrite源码分析 参考: https://blog.csdn.net/linsongbin1/article/details/54581787 http://ifeve.com/java ...