HDU 3720 深搜 枚举
DES:从23个队员中选出4—4—2—1共4种11人来组成比赛队伍。给出每个人对每个职位的能力值。给出m组人在一起时会产生的附加效果。问你整场比赛人员的能力和最高是多少。
用深搜暴力枚举每种类型的人选择情况。感觉是这个深搜写的很机智。
在vector中存结构体就会很慢。TLE。直接存序号就AC了。以后还是尽量少用结构体吧。
#include<stdio.h>
#include<string.h>
#include<map>
#include<vector>
#include<iostream>
using namespace std; vector<int>play[];
vector<int>ans;
int pow[];
map<string, int>mtype;
map<string, int>mname;
int eff[][];
int maxn = ; void dfs2(int, int );
void dfs3(int, int );
void dfs4(int, int ); void dfs1(int pos, int sum)
{
if (sum == )
{
dfs2(-, );
return;
}
for (int i=pos+; i<play[].size(); ++i)
{
ans.push_back(play[][i]);
dfs1(i, sum+);
ans.pop_back();
}
} void dfs2(int pos, int sum)
{
if (sum == )
{
dfs3(-, );
return;
}
for (int i=pos+; i<play[].size(); ++i)
{
ans.push_back(play[][i]);
dfs2(i, sum+);
ans.pop_back();
}
} void dfs3(int pos, int sum)
{
if (sum == )
{
dfs4(-, );
return;
}
for (int i=pos+; i<play[].size(); ++i)
{
ans.push_back(play[][i]);
dfs3(i, sum+);
ans.pop_back();
}
} void dfs4(int pos, int sum)
{
if (sum == )
{
int anss = ;
for (int i=; i<ans.size(); ++i)
{
for (int j=i+; j<ans.size(); ++j)
{
anss += eff[ans[i]][ans[j]];
}
anss += pow[ans[i]];
}
if (anss > maxn)
maxn = anss;
return;
}
for (int i=pos+; i<play[].size(); ++i)
{
ans.push_back(play[][i]);
dfs4(i, sum+);
ans.pop_back();
}
} int main()
{
mtype["goalkeeper"] = ;
mtype["defender"] = ;
mtype["midfielder"] = ;
mtype["striker"] = ;
char name[], type[];
int power;
while(cin >> name)
{
maxn = -0x3f3f3f3f;
ans.clear();
for (int i=; i<; ++i) play[i].clear(); cin >> power >> type;
int tt = mtype[type];
pow[] = power;
mname[name] = ;
play[tt].push_back();
memset(eff, , sizeof(eff)); for (int i=; i<=; ++i)
{
cin >> name >> power >> type;
pow[i] = power;
mname[name] = i;
int tt = mtype[type];
play[tt].push_back(i);
} int n;
cin >> n;
int n1, n2, add;
char na1[], na2[];
for (int i=; i<=n; ++i)
{
cin >> na1 >> na2 >> add;
n1 = mname[na1];
n2 = mname[na2];
eff[n1][n2] = add;
eff[n2][n1] = add;
}
int a[] = {, , , };
bool flag = true;
for (int i=; i<; ++i)
{
if (play[i].size() < a[i])
{
flag = false;
break;
}
}
if (!flag)
{
cout << "impossible\n";
continue;
} dfs1(-, );
cout << maxn << endl;
}
return ;
}
LOoK
HDU 3720 深搜 枚举的更多相关文章
- USACO 2.3.3 Zero Sum 和为零(深搜枚举)
Description 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白,来将 ...
- hdu 1181 深搜
中文题 深搜 许久没写鸟,卡在输入问题上... #include <iostream> #include <string> using namespace std; bool ...
- hdu 1010 深搜+剪枝
深度搜索 剪枝 还不是很理解 贴上众神代码 //http://blog.csdn.net/vsooda/article/details/7884772#include<iostream> ...
- POJ-1190-生日蛋糕-DFS(深搜)-枚举-多重剪枝
题目链接: 这个题目非常好,有难度:能够好好的多做做: #include<iostream> #include<string> #include<cstdio> # ...
- hdu 1518 深搜
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...
- hdu 1716 深搜dfs
#include<stdio.h> #include<stdlib.h> #include<string.h> #define N 5 int f[N]; int ...
- hdu4876 深搜+(随机枚举剪枝)
题意: 给你n个数,让你从选择k个数,然后排成一个环(k个数的顺序随意,但是排成一个环后就不能变了),然后可以在这个环上任意的找连续w个数(w<=k),可以找多次,得到一个值等于当前 ...
- 2015暑假多校联合---Cake(深搜)
题目链接:HDU 5355 http://acm.split.hdu.edu.cn/showproblem.php?pid=5355 Problem Description There are m s ...
- hdu 5648 DZY Loves Math 组合数+深搜(子集法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5648 题意:给定n,m(1<= n,m <= 15,000),求Σgcd(i|j,i&am ...
随机推荐
- 20145329 《网络对抗技术》Web基础
实践目标 Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. Web前端javascipt 理解JavaScript的基本 ...
- 面向对象初调用:foolish 电梯
本周我们完成的任务是傻瓜电梯的调度,对于那十分十分详细的指导书,我感觉想要说明白题目要求,是做不到的,所以就把指导书贴出来给大家看了,,由于在下还不会网页制作,只能通过百度网盘了,https://pa ...
- Email移动的原理
1.从数据库中得到被移动邮件的uid: 2.选择移动邮件所属folder,即SelectFolder; 3.调用copymessage(path,vmime::net::messageset::byU ...
- 使用Oracle执行计划分析SQL性能
执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述.即就是对一个查询任务,做出一份怎样去完成任务的详细方案. 如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的 ...
- P3870 [TJOI2009]开关
思路 重题 代码 #include <iostream> #include <vector> #include <cstdio> #include <cstr ...
- 3G下的无压缩视频传输(基于嵌入式linux) (转载)
本课题研究嵌入式系统在数据采集,3G无线通信方面的应用,开发集视频采集.地理信息采集.无线传输.客户机/服务器模式于一体的车载终端,实现终端采集视频与GPS信息的传输,支持服务器端显示视频与GPS信息 ...
- Java 文件夹递归遍历
import java.io.File; public class Demo1 { public static void main(String[] args) { File dir=new File ...
- 用python生成器实现杨辉三角
先看杨辉三角的形态: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 上学的时候大多是用c语言的两层for循环在实现,现在我们尝试用生成器来实现. 先说思路:我 ...
- jquery作业 教授答案
http://www.cnblogs.com/qianjinyan/p/8961086.html 题目要求: 1. 通过jquery动态的创建一个表格,随机生成(id自增,name随机2-3个中文汉字 ...
- 环境变量.JAVA_HOME
1.资料:(我的文章) http://www.cnblogs.com/cppskill/p/8341263.html 2. 2.1.界面 2.2.代码 unit formMain; interface ...