题意:

XCOM Enemy Unknown

Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)

Total Submission(s): 814 Accepted Submission(s): 242


Problem Description
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

Hint

第一次如果选择了0,那么3和6的恐慌值就会增加到5,第二次不管怎么选择,3和6总会有一个超过5.

思路:
      暴搜时间过得去,数据很小,每次分三种情况就行了..

#include<stdio.h>
#include<string.h> #define N 20

typedef struct
{
int
hp ,zhou;
}
NODE; typedef struct
{
int
a ,b ,c;
}
Q; int Z[10][N];
NODE node[N];
Q qq[105]; int max_ans;
int
K ,n; void DFS(int deep)
{
if(
max_ans < deep) max_ans = deep;
if(
deep == K + 1) return ; int a = qq[deep].a;
int
b = qq[deep].b;
int
c = qq[deep].c; //1
NODE mk_node[N];
int
i;
for(
i = 1 ;i <= n ;i ++)
mk_node[i] = node[i];
node[a].hp -= 2;
if(
node[a].hp < 1) node[a].hp = 1;
node[b].hp += 1,node[c].hp += 1;
for(
i = 1 ;i <= Z[node[b].zhou][0] ;i ++)
node[Z[node[b].zhou][i]].hp ++;
for(
i = 1 ;i <= Z[node[c].zhou][0] ;i ++)
node[Z[node[c].zhou][i]].hp ++;
for(
i = 1 ;i <= n ;i ++)
if(
node[i].hp > 5) break;
if(
i == n + 1 && max_ans != K + 1)
DFS(deep + 1);
for(
i = 1 ;i <= n ;i ++)
node[i] = mk_node[i]; //2
for(i = 1 ;i <= n ;i ++)
mk_node[i] = node[i];
node[b].hp -= 2;
if(
node[b].hp < 1) node[b].hp = 1;
node[a].hp += 1,node[c].hp += 1;
for(
i = 1 ;i <= Z[node[a].zhou][0] ;i ++)
node[Z[node[a].zhou][i]].hp ++;
for(
i = 1 ;i <= Z[node[c].zhou][0] ;i ++)
node[Z[node[c].zhou][i]].hp ++;
for(
i = 1 ;i <= n ;i ++)
if(
node[i].hp > 5) break;
if(
i == n + 1 && max_ans != K + 1)
DFS(deep + 1);
for(
i = 1 ;i <= n ;i ++)
node[i] = mk_node[i]; //3
for(i = 1 ;i <= n ;i ++)
mk_node[i] = node[i];
node[c].hp -= 2;
if(
node[c].hp < 1) node[c].hp = 1;
node[a].hp += 1,node[b].hp += 1;
for(
i = 1 ;i <= Z[node[a].zhou][0] ;i ++)
node[Z[node[a].zhou][i]].hp ++;
for(
i = 1 ;i <= Z[node[b].zhou][0] ;i ++)
node[Z[node[b].zhou][i]].hp ++;
for(
i = 1 ;i <= n ;i ++)
if(
node[i].hp > 5) break;
if(
i == n + 1 && max_ans != K + 1)
DFS(deep + 1);
for(
i = 1 ;i <= n ;i ++)
node[i] = mk_node[i];
} int main ()
{
int
i ,j ,m ,t ,cas = 1;
int
a;
scanf("%d" ,&t);
while(
t--)
{

scanf("%d %d %d" ,&n ,&m ,&K);
memset(Z ,0 ,sizeof(Z));
for(
i = 1 ;i <= n ;i ++)
{

scanf("%d" ,&node[i].zhou);
node[i].zhou ++;
Z[node[i].zhou][0]++;
Z[node[i].zhou][Z[node[i].zhou][0]] = i;
}
for(
i = 1 ;i <= n ;i ++)
scanf("%d" ,&node[i].hp);
for(
i = 1 ;i <= K ;i ++)
{

scanf("%d %d %d" ,&qq[i].a ,&qq[i].b ,&qq[i].c);
qq[i].a ++ ,qq[i].b ++ ,qq[i].c ++;
}

max_ans = 1;
DFS(1);
printf("Case #%d: %d\n" ,cas ++ ,max_ans - 1);
}
return
0;
}

hdu4536 水搜索的更多相关文章

  1. hdu5012 水搜索

    题意:       给你一个正方体的初始状态和末状态,问你是否可以再6步之内转到这个状态,有四种转的方式,如果你面对的是正方向的正前方,那么转的方式就是 顺时针,逆时针,上,下. 思路:        ...

  2. P5198 [USACO19JAN]Icy Perimeter S (洛谷) (水搜索)

    同样是因为洛谷作业不会写…… 写(水)博客啦. 直接放题目吧,感觉放在代码框里好看点 Farmer John要开始他的冰激凌生意了!他制造了一台可以生产冰激凌球的机器,然而不幸的是形状不太规则,所以他 ...

  3. hdu1572 水搜索

    题意: 中文的不解释; 思路:           其实就是一个水的搜索,直接搜索不会超时,还有别跑最短路了,题目没要求跑最短路,别读错题,刚开始自己嘚嗖的跑了一边最短路 wa了 ,正好最近看了STL ...

  4. hdu4771 水搜索(状态压缩+bfs)

    题意:      给你一个n*m的地图,问你从起点出发,吧所有的宝藏都捡完用的最少时间. 思路:k <= 4,水题,直接开一个数组mark[now][x][y];now代表的是当前检宝藏的二进制 ...

  5. hdu 5094 Maze(水搜索)

    题目意思:说有一个人在(1,1) 他的目标点在(n,m) 每次是4方向的移动: 限制条件:有的各自之间有墙 或者门,强不可通过,有对应的要钥匙可以开启这个类型的所有门: 问题:求最少步骤数(和): 类 ...

  6. Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) A B 水 搜索

    A. Oath of the Night's Watch time limit per test 2 seconds memory limit per test 256 megabytes input ...

  7. hdu2102 水搜索

    题意:                                    A计划 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次 ...

  8. hdu 2181 水搜索

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  9. Luogu P1141 01迷宫【搜索/dfs】By cellur925

    题目传送门 我tm到现在还需要刷这种水搜索...我退役吧. 但就是搜索弱嘛 补一补嘛qwq 题目大意:给你一张地图与许多询问,每次询问求这个点所在联通块的点的个数. 所以这个题目的本质就是在求联通块. ...

随机推荐

  1. a标签不能继承父级的颜色

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. CVE-2014-4210 SSRF漏洞

    Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis.fastcgi等脆弱组件. 修复方式: 1.删除server/lib/uddiexplorer.w ...

  3. Java split 根据指定字符串分隔成list数组的用法

    String str="Java string split test";      String[] strarray=str.split(" ");//得到一 ...

  4. FreeBSD Fcitx 输入法框架设置

    #FreeBSD# 在.cshrc和/etc/csh.cshrc中进行如下配置,此配置可以解决部分窗口fcitx无效的问题. setenv QT4_IM_MODULE fcitx setenv GTK ...

  5. 前端学习 node 快速入门 系列 —— npm

    其他章节请看: 前端学习 node 快速入门 系列 npm npm 是什么 npm 是 node 的包管理器,绝大多数 javascript 相关的包都放在 npm 上. 所谓包,就是别人提供出来供他 ...

  6. spring事务:事务控制方式,使用AOP控制事务,七种事务传播行为,声明事务,模板对象,模板对象原理分析

    知识点梳理 课堂讲义 1)事务回顾 1.1)什么是事务-视频01 事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败. 1.2)事务的作用 事务特征(ACID) 原子 ...

  7. Jmeter性能常见问题集锦

    1. java.net.BindException: Address already in use: connect 开始以为是单机运行脚本运行不过来,所以另加了一台负载机同时运行脚本 分布式环境部署 ...

  8. Git常用命名

    文字整理: git config - - 可以配置git的参数,可以使用 git config --list查看已经配置的git参数. 其中有三个级别的保存位置, –system(本系统) –glob ...

  9. 后台开发-核心技术与应用实践--TCP协议

    网络模型 为使不同计算机厂家的计算机能够互相通信,国际标准化组织 ISO 1981 年正式推荐了一个网络系统结构一一七层参考模型,也叫作开放系统互连模型. ISO 七层网络模型及其功能展示: 这个七层 ...

  10. Prometheus联邦

    联邦使得一个 Prometheus 服务器可以从另一个 Prometheus 服务器提取选定的时序. 1. 使用场景 Prometheus 联邦有不同的使用场景.通常,联邦被用来实现可扩展的 Prom ...