题意:

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. hdu4771 水搜索(状态压缩+bfs)

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

  3. hdu1572 水搜索

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

  4. hdu2102 水搜索

    题意: A计划 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说 ...

  5. Fire Game FZU - 2150 (水搜索)

    其实写一个spfa就行  遍历所有的草的点  组合两个 求最大时间的最小 #include <iostream> #include <cstdio> #include < ...

  6. 搜索复习-基础水题(一共12道)

    由于是跟着黄学长刷题,此篇博文里所有JudgeOnline都是http://218.5.5.242:9018/JudgeOnline/ tyvj1080 N皇后 描述 检查一个如下的6 x 6的跳棋棋 ...

  7. hdu4403暴力搜索

    题意:      给你一个数字串,让你在里面添加一个=和若干个+,使等式成立. 思路:      lmax最大是15,直接暴搜,无压力,关键是判重,要在答案的时候判重,一开始在进队列之前判的,各种wa ...

  8. 灌水导论——灌水法初步

    灌水法: Flood Fill 直译为大水漫灌,会造成土地盐碱化...... 但是,在OI中,灌水不失为水搜索的一种好方法呢~~ 灌水的思想: 灌水的思想其实就是从一个点(水源)出发,将符合条件可以到 ...

  9. 清北学堂(2019 4 28 ) part 1

    今天主要用来铺路,打基础 枚举 没什么具体算法讲究,但要考虑更优的暴力枚举方法,例如回文质数,有以下几种思路: 1.挨个枚举自然数,再一起判断是否是回文数和质数,然而一看就不是最优 2.先枚举质数再判 ...

最新文章

  1. 如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理
  2. 2020年推荐系统工程师炼丹手册
  3. 元组中[-1]的作用
  4. html 高度塌陷,CSS之高度塌陷问题解决方案
  5. 在线点餐外卖系统 毕业设计毕业论文参考(1)功能
  6. Uber AI 研究院深度解构 ICLR 2019 最佳论文「彩票假设」!
  7. JDK 运行参数 JAVA -Dxxx与System.setProperty()的关系
  8. 合天网安《Weekly CTF》第四周
  9. LTspice使用第三方spice模型进行仿真
  10. 百家号在电脑上如何查看作者的其它文章
  11. Git与Github入门(一)
  12. [专业亲测]Ubuntu16.04安装Nvidia显卡驱动(cuda)--解决你的所有困惑
  13. PMP系列 - 关键链法
  14. 将数字金额转换为中文大写金额
  15. 【matlab教程】20、简单网格细分
  16. 操作系统课后答案 第四--六章 黑新宏 胡元义主编
  17. linux nss升级,Linux系统升级
  18. 基于51单片机的函数/波形信号发生器
  19. 2. Pod概念、网络通讯
  20. 织梦安装或迁移后无法更新栏目HTML,报错无法完成请求

热门文章

  1. Gradle for Android 第三篇( 依赖管理 )
  2. BZOJ 2748: [HAOI2012]音量调节【二维dp,枚举】
  3. 透视表提取不反复记录(3)-每组最小值
  4. 把工程部署在tomcat的root路径下
  5. Eclipse使用技巧 快捷键
  6. POWER-BI开发版功能简介
  7. 用Word 2010发布博文
  8. [bzoj2288][pojChallenge]生日礼物【贪心+堆+链表】
  9. mysql五补充部分:SQL逻辑查询语句执行顺序
  10. 最大整数(Noip1998连接多位数)