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 ...
随机推荐
- 20145212罗天晨 注入shellcode实验及Retuen-to-libc实验
注入shellcode实验 实验步骤 一.准备一段shellcode 二.设置环境 Bof攻击防御技术 1.从防止注入的角度来看:在编译时,编译器在每次函数调用前后都加入一定的代码,用来设置和检测堆栈 ...
- HTML语法分析
什么是HTML htyper text markup language 即超文本标记语言HTML是一个网页的主体部分,也是一个网页的基础.因为一个网页可以没有样式,可以没有交互,但是必须要有网页需要呈 ...
- Python 代码片段收藏
list 列表相关 list 中最小值.最大值 import operator values = [1, 2, 3, 4, 5] min_index, min_value = min(enumerat ...
- Hexo 搭建 Blog 精简笔记
安装Hexo npm install -g hexo-cli Mac 用户 您在编译时可能会遇到问题,请先到 App Store 安装 Xcode,Xcode 完成后,启动并进入 Preference ...
- 【镜像地址】Maven地址列表
1.国内OSChina提供的镜像,非常不错 <mirror> <id>CN</id> <name>OSChina Central</name> ...
- C# 如何调用启动窗体
Program.cs中代码如下: using System; using System.Collections.Generic; using System.Windows.Forms; namespa ...
- Oncomine: 一个肿瘤相关基因研究的数据库--转载
如果你获得了一个肿瘤差异表达基因,想研究其是否可作为某种肿瘤的潜在标志物和靶点,又怕做实验会得到阴性结果,浪费时间和金钱,这时候你就应该想到Oncomine数据库了(www.oncomine.org) ...
- bzoj 1483: [HNOI2009]梦幻布丁 启发式合并vector
1483: [HNOI2009]梦幻布丁 Time Limit: 10 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description N个 ...
- Java中的hashcode方法
一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode.在Java中也一样,hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列 ...
- Android JNI学习(三)——Java与Native相互调用
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...