XCOM-Enemy Unknown是一款很好玩很经典的策略游戏. 在游戏中,由于未知的敌人--外星人入侵,你团结了世界各大国家进行抵抗.随着游戏进展,会有很多的外星人进攻事件.每次进攻外星人会选择3个国家攻击,作为联盟的指挥者,你要安排有限的联盟军去支援其中一个国家,抵抗进攻这个国家的外星人.战斗胜利之后这个被支援的国家恐慌值就会-2点(恐慌值最少减为1),而其他两个未被支援的国家恐慌值就会+2点,同时和这两个国家在相同大洲的其他国家恐慌值也会+1点. 当一个国家的恐慌值超过5点,这个国家就会对联盟失去信心从而退出联盟. 现在给你外星人将会进攻的地点,问你最多能在不失去任何一个国家信任的情况下抵挡多少次外星人的进攻.
 
Input
第一行有一个整数T代表接下来有T组数据 每组数据第一行是三个整数,n,m,k分别代表联盟国家的个数,大洲的个数,外星人的进攻次数. 第二行是n个数字代表各个国家所属的大洲(大洲序号从0到m-1) 第三行是n个数字代表各个国家初始的恐慌值 接下去k行代表外星人进攻 每行有三个数字,表示该次外星人进攻的国家(国家序号从0到n-1)
[Technical Specification] 0<T<=100 8<n<=16 2<m<=5 0<k<=100 0<初始恐慌值<=5 每个州至少有三个国家 每次外星人进攻一定发生在不同州的三个国家
 
Output
首先输出case数(见sample),接着输出在不失去任何一个国家的情况下能抵挡外星人进攻最多的次数.
 
Sample Input
1
9 3 2
0 0 0 1 1 1 2 2 2
3 3 3 3 3 3 3 3 3
0 3 6
0 3 6
 
Sample Output
Case #1: 1
 
题意我就不说了
解析:刚开始看这题的时候以为要搜100层,岂不是爆了,然而。。。。。。其实根本到不了那么深,所以爆搜即可。
 
代码

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<sstream>
#include<algorithm>
#include<utility>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#include<iterator>
#include<stack>
using namespace std;
const int INF=1e9+;
const double eps=1e-;
const int maxn=;
int N,M,K;
vector<int> G[maxn];
int bel[maxn],val[maxn],ans;
struct Atk
{
int x,y,z;
Atk(int x=,int y=,int z=):x(x),y(y),z(z){}
}atk[];
bool work(int a,int y)
{
for(int i=;i<G[a].size();i++)
{
int c=G[a][i];
if(c==y) val[c]+=;
else val[c]+=;
if(val[c]>) return false;
}
return true;
}
void dfs(int step)
{
ans=max(ans,step);
if(step>=K) return;
int B[maxn];
for(int i=;i<N;i++) B[i]=val[i];
Atk& t=atk[step];
int x=t.x,y=t.y,z=t.z;
val[x]-=;
if(val[x]<) val[x]=;
if(work(bel[y],y)&&work(bel[z],z)) dfs(step+);
for(int i=;i<N;i++) val[i]=B[i];
val[y]-=;
if(val[y]<) val[y]=;
if(work(bel[x],x)&&work(bel[z],z)) dfs(step+);
for(int i=;i<N;i++) val[i]=B[i];
val[z]-=;
if(val[z]<) val[z]=;
if(work(bel[x],x)&&work(bel[y],y)) dfs(step+);
for(int i=;i<N;i++) val[i]=B[i];
return;
}
int main()
{
int T,Case=;
scanf("%d",&T);
while(T--)
{
for(int i=;i<maxn;i++) G[i].clear();
scanf("%d%d%d",&N,&M,&K);
int x,y,z;
for(int i=;i<N;i++)
{
scanf("%d",&x);
bel[i]=x;
G[x].push_back(i);
}
for(int i=;i<N;i++) scanf("%d",&val[i]);
for(int i=;i<K;i++)
{
scanf("%d%d%d",&x,&y,&z);
atk[i]=Atk(x,y,z);
}
ans=;
dfs();
printf("Case #%d: %d\n",++Case,ans);
}
return ;
}


hdu4536-XCOM Enemy Unknown(爆搜)的更多相关文章

  1. HDU4536 XCOM Enemy Unknown(dfs)

    题目链接. 分析: 用dfs枚举每一波攻击的三个国家. 很暴力,但没想到0ms. #include <iostream> #include <cstdio> #include ...

  2. 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1817  Solved: 665[Submit][Status] ...

  3. POJ 1166 The Clocks (爆搜 || 高斯消元)

    题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...

  4. 【 POJ - 1204 Word Puzzles】(Trie+爆搜|AC自动机)

    Word Puzzles Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10782 Accepted: 4076 Special ...

  5. hdu5323 Solve this interesting problem(爆搜)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Solve this interesting problem Time Limit ...

  6. poj1077 Eight【爆搜+Hash(脸题-_-b)】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4298840.html   ---by 墨染之樱花 题目链接:http://poj.org/pr ...

  7. [NOIP2015] 斗地主 大爆搜

    考试的时候想了半天,实在是想不到解决的办法,感觉只能暴力..然后暴力也懒得打了,小数据模拟骗30分hhh 然而正解真的是暴力..大爆搜.. 然后我的内心拒绝改这道题(TAT) 不过在wcx大佬的帮助下 ...

  8. BZOJ 1207: [HNOI2004]打鼹鼠【妥妥的n^2爆搜,dp】

    1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3259  Solved: 1564[Submit][Statu ...

  9. HDU 4403 A very hard Aoshu problem(dfs爆搜)

    http://acm.hdu.edu.cn/showproblem.php?pid=4403 题意: 给出一串数字,在里面添加一个等号和多个+号,使得等式成立,问有多少种不同的式子. 思路: 数据量比 ...

随机推荐

  1. Java中的enum

    package com.st.java; /** * ENUM枚举类型的使用 * @author Administrator * 2016年04月10日 */ public enum MoneyTyp ...

  2. Windows下命令行直接编译程序

    D:\> cl hello.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Cop ...

  3. C#用注册表开机自动启动某某软件

    代码如下: public static void chkAutoRun(bool isRun) { if (isRun)//开机自动启动 { try { RegistryKey runKey = Re ...

  4. CSS元素 之 float

    1. float 设计的初衷 Float 设计的初衷是为了文字环绕的效果 使得文字可以围绕着 图片.就像下面这样 2. float 的包裹和 破坏 A) 包裹性 和 破坏性 例如下图   我们原本是希 ...

  5. 九个Console命令,让 JS 调试更简单

    一.显示信息的命令 <!DOCTYPE html> <html> <head> <title>常用console命令</title> < ...

  6. (转)将wcf 以webservice的方式调用

    将wcf 以webservice的方式调用 问题:a公司使用wcf 发布服务(.net Framework 3.0 or 3.5),b公司需要使用a公司发布的服务 ,但b公司目前阶段只使用.net F ...

  7. NFS(网络文件系统)

    http://baike.baidu.com/subview/44349/16134489.htm

  8. sql 2000 分页

    create PROCEDURE [dbo].[Proc_GetPageList] (   @Tables varchar(1000),          --表名   @PK varchar(100 ...

  9. SSH公钥私钥安全通讯原理

    客户端在访问服务器的时候,防止通讯信息被截取,进行加密处理通讯. 在服务器上会有两把钥匙,公钥和私钥.公钥可以对所有公开,私钥只有服务器自己知道, 并且公钥产生的密文只能通过私钥才能解开 1:客户端发 ...

  10. js实现楼层效果

    今天自己写个楼层效果,有一点烦躁,小地方犯错误.各位大神来修改不足啊!!! <!DOCTYPE html><html lang="en"><head& ...