先分组,然后暴力;注意  初始化时不要为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. 【转】Linux 下取进程占用 cpu/内存 最高的前10个进程

    # Linux 下 取进程占用 cpu 最高的前10个进程ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # linux 下 取进程占用内存 ...

  2. $python数据分析基础——初识numpy库

    numpy库是python的一个著名的科学计算库,本文是一个quickstart. 引入:计算BMI BMI = 体重(kg)/身高(m)^2 假如有如下几组体重和身高数据,让求每组数据的BMI值: ...

  3. 谁说程序员不懂爱情【Her】

    2014.8.17日 我和我女朋友恋爱两周年的日子.走到今天很不容易,我很珍惜. 就想趁这机会,尽自己能力做一个特别的礼物. 这款应用两周前就开始计划了.也熬了几个晚上.接触wp开发时间不长,第一款应 ...

  4. python图片文字识别笔记

    我的环境为python3 坑比较多,在此做记录,以备查阅 命令行安装: pip install PIL pip install pytesseract pip install Pillow 下载tes ...

  5. Python 类的三大特性的综合运用 案例

    # --------------------- 类的三大特性的综合运用 案例 ------------------------- # 定义三个类:小狗,小猫,人 # 小狗:姓名,年龄(默认1岁) 吃饭 ...

  6. NSwag Tutorial: Integrate the NSwag toolchain into your ASP.NET Web API project

    https://blog.rsuter.com/nswag-tutorial-integrate-the-nswag-toolchain-into-your-asp-net-web-api-proje ...

  7. Effective C++ 条款11:在operator=中处理"自我赋值"

    "自我赋值"发生在对象被赋值给自己时: class Widget { ... }; Widget w; ... w = w; // 赋值给自己 a[i] = a[j]; // 潜在 ...

  8. java 与大数据学习较好的网站

    C# C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!https://www.cnblogs.com/doforfuture/p/6293926.html ...

  9. Linux 增加对外开放的端口

    查看端口是否对外开放 /etc/init.d/iptables status # /etc/init.d/iptables status 表格:filter Chain INPUT (policy A ...

  10. TCP中间件_个人方案

    按照功能分类,不管是直接的 insert/delete/update/select语句 还是 调用存储过程,基本的功能 就是 增删改查.又分为两大类: (1).查询(会返回结果集的),(2).非查询( ...