题意:

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. Nginx解析漏洞复现以及哥斯拉连接Webshell实践

    Nginx解析漏洞复现以及哥斯拉连接Webshell实践 目录 1. 环境 2. 过程 2.1 vulhub镜像拉取 2.2 漏洞利用 2.3 webshell上传 2.4 哥斯拉Webshell连接 ...

  2. 开发过程中遇到的js知识点总结,面试题等,持续更新

     1.Object.freeze() 方法用于冻结一个对象,即将对象设置为不可扩展.将对象的所有自有的属性和方法(包括Symbol值的属性和方法)配置为不可配置,不可写. Object.freeze( ...

  3. go中waitGroup源码解读

    waitGroup源码刨铣 前言 WaitGroup实现 noCopy state1 Add Wait 总结 参考 waitGroup源码刨铣 前言 学习下waitGroup的实现 本文是在go ve ...

  4. CVE-2019-20372-Nginx error_page 请求走私

    一.漏洞简介 Nginx 1.17.7之前版本中 error_page 存在安全漏洞.攻击者可利用该漏洞读取未授权的Web页面. 二.漏洞影响 Ngnix < 1.17.7 三.复现过程 错误代 ...

  5. DRF(django rest-framework)

    1.什么是DRF django组件,快速帮助我们开发遵循restful规范的一个组件 2.什么是restful规范 RESTful的URL用于指定资源,URL中只能使用名词的组合来标识资源," ...

  6. DenseNet的个人总结

    DenseNet这篇论文是在ResNet之后一年发表的,由于ResNet在当时引起了很大的轰动,所以DenseNet也将ResNet作为了主要的对比方法,读起来还是比较容易的,全篇只有两个数学公式,也 ...

  7. Java程序员都要懂得知识点:反射

    摘要:Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...

  8. 我的开源GIS解决方案之路

    好久没更新了,因为我在--憋--大--招--,对,就是今天这篇. 今天跟大家分享一下我的开源GIS解决方案经历. --额-- 考虑到单聊技术解决方案你可能会很快睡着,所以我今天会把重点放在我封装地图A ...

  9. Java应用性能瓶颈分析思路

    1 问题描述 因产品架构的复杂性,可能会导致性能问题的因素有很多.根据部署架构,大致的可以分为应用端瓶颈.数据库端瓶颈.环境瓶颈三大类.可以根据瓶颈的不同部位,选择相应的跟踪工具进行跟踪分析. 应用层 ...

  10. JAVA线上故障排查手册-(推荐)

    参考:https://fredal.xin/java-error-check?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=tout ...