题意:

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. 剑指 Offer 17. 打印从1到最大的n位数

    剑指 Offer 17. 打印从1到最大的n位数 Offer 17 题目解析: 暴力解法 package com.walegarrett.offer; /** * @Author WaleGarret ...

  2. burpsuite 隐藏 detectportal.firefox.com

        0x00原由 抓包时经常出现detectportal.firefox.com,不利于我们的渗透工作 0x01解决方法 在输入框输入:about:config 然后设置以下选项:network. ...

  3. Nmap命令使用方法

          Nmap使用合集 感谢博主:VVVinson    文章链接:https://www.cnblogs.com/Vinson404/p/7784829.html 参    数 说    明 ...

  4. 爬虫必知必会(5)_scrapy框架_基础

    一.移动端数据的爬取 基于某一款抓包工具,fiddler,青花瓷,miteproxy fillder进行一个基本的配置:tools->options->connection->all ...

  5. 实话实说:只会.NET,会让我们一直处于鄙视链、食物链的下游

    金三银四,是个躁动的季节. 结合最近的面试,谈一谈一个老牌开发人员的面试感悟. 大家都知道我的主力技术栈是 .NET + Devops + 弱前端 (当前技术认知,不排除以后变化). 面试了大小厂,有 ...

  6. 1_JVM与Java体系结构

    目录 JVM与Java体系结构 前言 架构师每天都在思考什么? 为什么要学习JVM Java vs C++ 推荐书籍 Java生态圈 字节码 多语言混合编程 Java发展的重大事件 虚拟机与Java虚 ...

  7. JS 字符数组和数字数组转换

    var newArr = ['1','2','3'].map(Number):// [1,2,3] var newArr =[1,2,3].map(String):// ['1','2','3']

  8. POJ1562_Oil Deposits(JAVA语言)

    思路:bfs.水题,标记下计数就完了. Oil Deposits Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22928 ...

  9. python2文件开头两行

    #!/usr/bin/python  或者  #!/usr/bin/env python 告诉操作系统python位置 # -*- coding:utf-8 -*- 设置文件编码为utf-8  (默认 ...

  10. unable to read askpass response from 'C:\Users\wxy\.IntelliJIdea2019.1\system\tmp\intellij-git-askpass.bat' bash: /dev/tty: No such device or address failed to execute prompt script (exit code 1)

    解决方法: