题意:

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. 洛谷 P4747 [CERC2017]Intrinsic Interval 线段树维护连续区间

    题目描述 题目传送门 分析 考虑对于 \([l,r]\),如何求出包住它的长度最短的好区间 做法就是用一个指针从 \(r\) 向右扫,每次查询以当前指针为右端点的最短的能包住 \([l,r]\) 的好 ...

  2. 【pytest官方文档】解读fixtures - 7. Teardown处理,yield和addfinalizer

    当我们运行测试函数时,我们希望确保测试函数在运行结束后,可以自己清理掉对环境的影响. 这样的话,它们就不会干扰任何其他的测试函数,更不会日积月累的留下越来越多的测试数据. 用过unittest的朋友相 ...

  3. WEB服务-Nginx之十-keepalived

    WEB服务-Nginx之10-keepalived 目录 WEB服务-Nginx之10-keepalived Keepalived和高可用 基本概述 Keepalived安装配置 Keepalived ...

  4. 一个mac软件合集的网站

    https://github.com/jaywcjlove/awesome-mac/blob/master/README-zh.md

  5. WBX24T2X CPEX国产化万兆交换板

      WBX24T2X是基于盛科CTC5160设计的国产化6U三层万兆CPEX交换板,提供24路千兆电口和2路万兆光口,采用龙芯 2K1000处理器.支持常规的L2/L3协议,支持Telnet.SNMP ...

  6. C# 基础 - 文件对话框

    using System.Windows.Forms; ... /// <summary> /// 选择保存文件的名称以及路径 取消返回 空""; /// </s ...

  7. 如何使用python把json文件转换为csv文件

    @ 目录 了解json整体格式 转换格式 提取key和value 使用pandas写入csv 了解json整体格式 这里有一段json格式的文件,存着全球陆地和海洋的每年异常气温(这里只选了一部分): ...

  8. 攻防世界 reverse 流浪者

    流浪者 int __thiscall sub_401890(CWnd *this) { struct CString *v1; // ST08_4 CWnd *v2; // eax int v3; / ...

  9. [递推] A. 【例题1】错排问题

    A. [例题1]错排问题 题目描述 求多少个 n n n个数的排列 A A A ,满足对于任意的 i ( 1 ≤ i ≤ n ) i(1 ≤ i ≤ n) i(1≤i≤n) 使 A i ≠ i Ai ...

  10. Dynamics CRM实体系列之字段

    本节开始讲实体中的基础数据存储对象,也就是字段. Dynamics CRM目前总共有13种字段类型,分别为单行文本.选项集.多选选项集.两个选项.图像.整数.浮点数.十进制数.货币.多行文本.日期和时 ...