HDU4536 XCOM Enemy Unknown(dfs)
题目链接。
分析:
用dfs枚举每一波攻击的三个国家。
很暴力,但没想到0ms。
#include <iostream>
#include <cstdio>
#include <vector> using namespace std; const int maxn = ; int p[maxn], nervous[maxn], n, m, k, max_cnt;
int att[][]; void dfs(int cn) {
//界限
if(max_cnt >= k) return ;
if(cn >= k) {
max_cnt = k; return ;
} int a[], bak[];
for(int v=; v<; v++) { //枚举支援的国家
/*
* 被支援的国家为 att[cn][v]
* 其他两个国家为 att[cn][(v+1)%3] 和 att[cn][(v+2)%3]
*/
a[] = att[cn][v]; //将国家序号存起来,方便调用
a[] = att[cn][(v+)%];
a[] = att[cn][(v+)%]; bak[] = nervous[a[]]; //备份
bak[] = nervous[a[]];
bak[] = nervous[a[]]; nervous[a[]] -= ;
if(nervous[a[]] < ) nervous[a[]] = ;
nervous[a[]] += ;
nervous[a[]] += ; //数据已经保证受攻击的3个国家一定在不同的洲
for(int i=; i<n; i++) {
if(p[i] == p[a[]] && i != a[]) nervous[i]++;
if(p[i] == p[a[]] && i != a[]) nervous[i]++;
} //价差是否都小于5
int flag = true;
for(int i=; i<n; i++) {
if(nervous[i] > ) {
max_cnt = max(max_cnt, cn);
flag = false;
}
} if(flag) dfs(cn+); //还原
for(int i=; i<n; i++) {
if(p[i] == p[a[]] && i != a[]) nervous[i]--;
if(p[i] == p[a[]] && i != a[]) nervous[i]--;
} nervous[a[]] = bak[];
nervous[a[]] = bak[];
nervous[a[]] = bak[];
}
} int main(){
int T; scanf("%d", &T); for(int kase=; kase<=T; kase++) {
scanf("%d%d%d", &n, &m, &k); for(int i=; i<n; i++) {
scanf("%d", &p[i]);
} for(int i=; i<n; i++) {
scanf("%d", &nervous[i]);
} for(int i=; i<k; i++) {
scanf("%d %d %d", &att[i][], &att[i][], &att[i][]);
} max_cnt = ;
printf("Case #%d: ", kase); //搜索
dfs(); printf("%d\n", max_cnt);
} return ;
}
HDU4536 XCOM Enemy Unknown(dfs)的更多相关文章
- LeetCode Subsets II (DFS)
题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) class Solution { publ ...
- LeetCode Subsets (DFS)
题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. class Sol ...
- 黑白图像(DFS)
输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块.如图6-11所示的图形有3个八连块. 图6-11 拥有3 ...
- HDU 2553 N皇后问题(dfs)
N皇后问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 在 ...
- POJ 1562(L - 暴力求解、DFS)
油田问题(L - 暴力求解.DFS) Description The GeoSurvComp geologic survey company is responsible for detecting ...
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的深度优先搜索遍历(DFS)
关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
随机推荐
- [ES6] Array.find()
Convenient method to find one item in an array, avoid writing and for + if: let arys = [1,,5,,6] ; ...
- Redis配置文件分析
#Redis演示示例配置文件 # 注意单位问题:当须要设置内存大小的时候,能够使用类似1k.5GB.4M这种常见格式: # # 1k=> 1000 bytes #1kb => 1024 b ...
- 微信支付bug
1.最基本的操作就是检查各项参数正确2.确保将测试微信号加入测试白名单 3.目录正确:发起授权请求的页面必须是在授权目录下的页面,而不能是存在与子目录中.否则会返回错误,Android返回“Syste ...
- 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化
第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...
- AS 进行单元测试
以下为本人在AndroidStudio 2.0 上实测后得出的结论,不像网上那一堆堆的误人子弟的文章,都是过时的或者根本就是不对的. 简介 和eclipse需要配置清单文件不同,AndroidStud ...
- 很棒的jQuery代码片段分享
jQuery实现的内链接平滑滚动 不需要使用太复杂的插件,只要使用下载这段代码即可实现基于内部链接的平滑滚动 $('a[href^="#"]').bind('click.smoot ...
- 【USACO 3.2.6】香甜的黄油
[描述] 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...
- 交叉编译:cannot find /lib/libc.so.6 collect2: ld returned 1 exit status
1.有时候明明指定了交叉编译的动态库搜索路径,但有些库提示还是搜索不到,而且提示的搜索路径有点奇怪,不是指定的路径,比如: /opt/mips-4.4/bin/../lib/gcc/mips-linu ...
- 使用Jquery解析Json
利用原生JSON对象,将对象转为字符串 [javascript] view plaincopy var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; j ...
- 跨控制器操作-thinkphp
用A函数 或者 $use=new IndexController(); A跨控制器 $data->A("Admin/Index")//admin下面的index控制器 $da ...