热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDU1045FireNet(搜索/贪心/二分图最大匹配)

题目链接:点击打开链接题意:类似于八皇后问题,每行每列不能产生冲突,但此题图中有墙,两个碉堡如果隔了墙是可以放到同一行列的。思路:一:搜索,由于数据规模很小,搜索是最直接的方式二:贪心

题目链接:点击打开链接

题意:类似于八皇后问题,每行每列不能产生冲突,但此题图中有墙,两个碉堡如果隔了墙是可以放到同一行/列的。

思路:

一:搜索,由于数据规模很小,搜索是最直接的方式

二:贪心,每个空地都有一个影响范围,一旦某块空地放置了碉堡,那么它的影响范围内所有空地都不能放碉堡了。贪心规则:每次选取影响范围最小的空地放置碉堡,然后就把这个空地影响范围内所有空地标记,按这种方法最后放置的碉堡数一定是最多的 。

三:二分图最大匹配,暂时略。

搜索:

// HDU 1045 Fire Net.cpp 0ms/1000ms
#include
#include
#include
#include
using namespace std;
int n, re, map[5][5], book[5][5];
int next[2][2] = { 0,-1,-1,0 };
int check(int row, int col) {
if (map[row][col] == 0) return 0;
for (int i = 0; i <2; i++) {
int x = row + ::next[i][0];
int y = col + ::next[i][1];
while (x >= 0 && y >= 0) {
if (map[x][y] == 0) break;//遇碉堡前遇墙,放到(row,col)对于此行/列满足,此行/列不用再判断
if (map[x][y] && book[x][y]) return 0; //遇墙前遇碉堡,不满足
x = x + ::next[i][0];
y = y + ::next[i][1];
}
}
return 1;
}
void dfs(int row, int col, int sum) {
if (row == n) {
re = max(re, sum);
return;
}
int y = (col + 1) % n;
int x = row + (y == 0);
dfs(x, y, sum);
if (check(row, col)) {
book[row][col] = 1;
dfs(x, y, sum + 1);
book[row][col] = 0;
}
}
int main(){
char s[10];
while (scanf("%d", &n) != EOF && n) {
re = 0;
memset(book, 0, sizeof(book));
for (int i = 0; i scanf("%s", s);
for (int j = 0; j map[i][j] = s[j] == '.' ? 1 : 0;
}
}
dfs(0, 0, 0);
printf("%d\n", re);
}
return 0;
}

贪心:

// HDU 1045 Fire Net(2).cpp 0ms/1000ms
#include
#include
#include
#include
using namespace std;
int n, map[5][5], book[5][5];
int next[4][2] = { 0,-1,0,1,-1,0,1,0 };
struct node {
int x, y, num;
node(){}
node(int a,int b,int c):x(a),y(b),num(c){}
bool operator<(node &a) {
return this->num }
}a[20];
int cal(int x,int y) {//计算影响范围大小
int cnt = 0;
for (int i = 0; i <4; i++) {
int r = x + ::next[i][0];
int c = y + ::next[i][1];
while (r >= 0 && r = 0 && c if (map[r][c] == 0) break;
cnt++;
r = r + ::next[i][0];
c = c + ::next[i][1];
}
}
return cnt;
}
void deal(int x, int y) {//标记影响范围内的点
book[x][y] = 1;
for (int i = 0; i <4; i++) {
int r = x + ::next[i][0];
int c = y + ::next[i][1];
while (r >= 0 && r = 0 && c if (map[r][c] == 0) break;
book[r][c] = 1;
r = r + ::next[i][0];
c = c + ::next[i][1];
}
}
}
int main(){
int re;
char s[10];
while (scanf("%d", &n) != EOF && n) {
re = 0;
memset(book, 0, sizeof(book));
for (int i = 0; i scanf("%s", s);
for (int j = 0; j map[i][j] = s[j] == '.' ? 1 : 0;
}
}
for (int i = 0; i for (int j = 0; j int t = cal(i, j);
a[i * n + j] = node(i, j, t);
}
}
sort(a, a + n*n);
for (int i = 0; i int x = a[i].x, y = a[i].y;
if (map[x][y] == 0 || book[x][y] == 1) continue;
re++;
deal(x, y);
}
printf("%d\n", re);
}
return 0;
}




推荐阅读
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
author-avatar
雪天使杨果果
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有