noi1816 画家问题(技巧搜索Dfs)
/*
Problem 画家问题
假设一个ans数组存的是对每一个点的操作 0表示不图 1表示图
那么 对于原图 g 操作第三行时对第一行没有影响 同样往下类似的
所以 假设我们知道了ans的第一行就是最后答案的第一行 那么对于ans的第二行 就必须是的第一行全变成黄色
以此类推 最后检验第n行 是不是全部黄色就好了
所以只需要枚举第一行的所有情况 共2的n次方种情况
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define inff 0x7fffffff
using namespace std;
int n,ans[][],g[][],tmp[][],anss,minn=inff,tot;
char s;
void Printf()//计数 染了几个
{
anss=;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(ans[i][j]==)anss++;
minn=min(minn,anss);
}
void Pai()//根据ans的第一行 逐行染色
{
int i,j,f=;
memset(tmp,,sizeof(tmp));
for(i=;i<=n;i++)
for(j=;j<=n;j++)
tmp[i][j]=g[i][j];
for(i=;i<=n;i++)
{
if(ans[][i]==)
{
tmp[][i]=!tmp[][i];
tmp[][i+]=!tmp[][i+];
tmp[][i-]=!tmp[][i-];
tmp[][i]=!tmp[][i];
}
}
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(tmp[i-][j]==)
{
tmp[i-][j]=;
ans[i][j]=;
tmp[i][j]=!tmp[i][j];
tmp[i][j+]=!tmp[i][j+];
tmp[i][j-]=!tmp[i][j-];
tmp[i+][j]=!tmp[i+][j];
}
for(i=;i<=n;i++)//最后检验最后一行是不是恰好全为黄色
if(tmp[n][i]==)f=;
if(f==)Printf();
}
void Dfs(int t)//枚举ans的第一行的所有情况
{
if(t>n)
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
ans[i][j]=;
Pai();
return;
}
ans[][t]=;Dfs(t+);
ans[][t]=;Dfs(t+);
}
int main()
{
int i,j;
cin>>n;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
cin>>s;
if(s=='w')g[i][j]=;
else g[i][j]=;
}
Dfs();
if(minn<0x7fffffff)cout<<minn;
else cout<<"inf";
}
noi1816 画家问题(技巧搜索Dfs)的更多相关文章
- 深度优先搜索 DFS 学习笔记
深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...
- 简单搜索dfs, 简单的修剪搜索
选择最合适的语言做一个项目是非常重要的.但,熟练的掌握自己的武器,这也是非常重要的. ========================================================= ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
- POJ 2243 简单搜索 (DFS BFS A*)
题目大意:国际象棋给你一个起点和一个终点,按骑士的走法,从起点到终点的最少移动多少次. 求最少明显用bfs,下面给出三种搜索算法程序: // BFS #include<cstdio> #i ...
- 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ...
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- 【算法入门】深度优先搜索(DFS)
深度优先搜索(DFS) [算法入门] 1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解 ...
随机推荐
- java环境变量设置方法
1.安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为D:\java\jdk1.5.0_08: 2.安装完成后,右击“我的电脑”,点击“属性”: 3.选择“高 ...
- hadoo namenode format 异常 java.net.UnknownHostException: localhost.localdomain: localhost.localdomain
/etc/sysconfig/network换成你在hosts里设置的值 /etc/rc.d/init.d/network restart 重启网络 hostname后就会发现hostname变了,也 ...
- jQuery的preventDefault()
1. 含义: preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交). 2. 语法: event.preventDefault() 3. 例子: 防止链 ...
- NWERC 2012 Problem E Edge Case
比赛的时候刷了一点小聪明,发现这个数列是卢卡斯数,一个递推关系像斐波拉契数列的数列: 我不知道怎么证明,如果哪天无意中会证了再加上: 这题唯一的难点就是大数运算: 直接用JAVA 代码: import ...
- 【转】django的ORM操作数据库样例
这个算是我看到的大全了,希望可以解决明天我希望解决的两个问题... class Blog(models.Model): name = models.CharField(max_length=100) ...
- Jsp中获得集合List或Set的长度
首先要引入<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> ...
- 【HDU2222】Keywords Search(AC自动机)
Problem Description In the modern time, Search engine came into the life of everybody like Google, B ...
- Spring MVC 解读——View,ViewResolver(转)
上一篇文章(1)(2)分析了Spring是如何调用和执行控制器方法,以及处理返回结果的,现在我们就分析下Spring如何解析返回的结果生成响应的视图. 一.概念理解 View ---View接口表示一 ...
- development period
- mind nerverr later(转)
每个人都有感到失落迷惘的时候.人生用专制又霸道的方式运行着,每当我们心想一切尘埃落定.生活稳固的时候,生活总爱给我们惊喜,粉碎我们短暂的安逸,让我们不得不重新思考—_— “我走对路了吗?” “我能够赚 ...