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相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
随机推荐
- [Angular 2] Create a simple search Pipe
This lesson shows you how to create a component and pass its properties as it updates into a Pipe to ...
- mac eclipse配置 tomcat
mac由于各种软件不兼容,某些软件对于开发来说很苦恼,tomcat这个东西一直不知道怎么弄,项目都开了好几天了,一直用在虚拟机上用windows系统,但是用虚拟机明显感觉到电池待机时间更短了,所以就研 ...
- php 链式操作的实现 学习记录
php 面向对象中实现链式操作的关键部分:调用的方法中返回当前对象 ,从而实现链式操作: <?php namespace commom; class db { public function w ...
- Ubuntu下全命令行安装Android SDK
为了在AWS云服务器上实现自动化打包Android APP的APK包,我需要远程命令行环境下安装Android SDK,当然还要用代理或者科学上网,这里简单整理一下过程: 首先,由于墙的原因,Andr ...
- 我也要这样写define、、
今天在TCO1B看到这位大神的代码,简直醉了,当需要手速的时候可以考虑使用一下.. #define V(x) vector<x > #define vs V(string) #define ...
- C#解leetcode 18. 4Sum
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- 用js生成下载文件
function downloadFile(fileName, content) { var aLink = document.createElement('a'); var blob = new B ...
- asp.net web.config的学习笔记
原文地址:http://www.cnblogs.com/Bulid-For-NET/archive/2013/01/11/2856632.html 一直都对web.config不太清楚.这几天趁着项目 ...
- Oracle10g、 Oracle11g完美共存
Oracle10g. Oracle11g完美共存 环境描述 客户服务器上已经安装Oracle9i软件并部署多套数据库,现在客户要求安装Oracle11g软件,并且创建11g数据库, ...
- Oracle_Flashback_技术_总结
Oracle Flashback 技术 总结 Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数.要使用flashback 的特性,必须启 ...