poj 3279 Fliptile(二进制)
http://poj.org/problem?id=3279
在n*N的矩阵上,0代表白色,1代表黑色,每次选取一个点可以其颜色换过来,即白色变成黑色,黑色变成白色,而且其上下左右的点颜色也要交换,求最少交换多少点能把全部换成颜色0
输出所需要换的点,用1表示,如果有多种方案,输出字典序足最小的方案
但是这题的数据里没有字典序的情况,所以没有比较字典序也可以过,我一开始就不知道这个怎么按字典序排
用二进制枚举第一行翻转的所有的情况,然后第一行的翻转确定了再一行行的往下枚举点坑,找出全为0的情况。
第一行的情况确定了,下面的就确定了
#include<cstdio>
#include<cstring>
using namespace std;
int dx[]={,-,,,};
int dy[]={,,-,,};
int a[][],b[][],c[][];
int n,m;
int sreach(int x)
{
for (int i=;i<=m;i++){
if (x&(<<(i-))){
c[][i]=;
for (int j=;j<;j++)
b[+dx[j]][i+dy[j]]^=;
}
}
for (int i=;i<=n;i++){
for (int j=;j<=m;j++){
if (b[i-][j]==){
c[i][j]=;
for (int k=;k<;k++){
b[i+dx[k]][j+dy[k]]^=;
}
}
}
}
for (int i=;i<=m;i++)
if (b[n][i]) return ;
return ;
}
int main()
{
int i,j;
while (~scanf("%d %d",&n,&m))
{
int flag=;
for (i=;i<=n;i++){
for (j=;j<=m;j++)
scanf("%d",&a[i][j]);
}
for (i=;i<(<<m);i++)
{
memcpy(b,a,sizeof(a));
memset(c,,sizeof(c));
if (sreach(i))
{
flag=;
break;
}
}
if (!flag) printf("IMPOSSIBLE\n");
else {
for (i=;i<=n;i++){
for (j=;j<=m;j++){
printf("%d",c[i][j]);
if (j!=m) printf(" ");
}
printf("\n");
}
}
}
return ;
}
poj 3279 Fliptile(二进制)的更多相关文章
- POJ 3279 Fliptile[二进制状压DP]
题目链接[http://poj.org/problem?id=3279] 题意:给出一个大小为M*N(1 ≤ M ≤ 15; 1 ≤ N ≤ 15) 的图,图中每个格子代表一个灯泡,mp[i][j] ...
- poj 3279 Fliptile(二进制搜索)
Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He ha ...
- POJ 3279 Fliptile (二进制枚举)
<题目链接> <转载于 >>> > 题目大意: 给定一个M*N矩阵,有些是黑色(1表示)否则白色(0表示),每翻转一个(i,j),会使得它和它周围4个格变为另 ...
- POJ.3279 Fliptile (搜索+二进制枚举+开关问题)
POJ.3279 Fliptile (搜索+二进制枚举+开关问题) 题意分析 题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置( ...
- POJ 3279 Fliptile(翻格子)
POJ 3279 Fliptile(翻格子) Time Limit: 2000MS Memory Limit: 65536K Description - 题目描述 Farmer John kno ...
- 状态压缩+枚举 POJ 3279 Fliptile
题目传送门 /* 题意:问最少翻转几次使得棋子都变白,输出翻转的位置 状态压缩+枚举:和之前UVA_11464差不多,枚举第一行,可以从上一行的状态知道当前是否必须翻转 */ #include < ...
- POJ 3279(Fliptile)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...
- POJ 3279 Fliptile(反转 +二进制枚举)
Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13631 Accepted: 5027 Descrip ...
- POJ 3279 Fliptile (dfs+二进制)
Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give more ...
随机推荐
- 传输层——UDP报文头介绍
16位源端口 16位目的端口 16位总长度 16位校验和 数据 源端口:长度为16位,2个字节. 目的端口:长度为16位,2个字节. 总长度:长度为16位,2个字节,表示 UDP包头长度 和 数据长度 ...
- MVC异步控制器加载一个网页的所有内容
public void PageAsync() { AsyncManager.OutstandingOperations.Increment(); WebRequest req = WebReques ...
- 创建springboot项目步骤
步骤:
- powerdessigner使用教程
https://jingyan.baidu.com/article/86fae346e089393c49121a11.html
- mui-webview-子页面调用父页面的js方法
子页面// 获取当前webviewvar self = plus.webview.currentWebview();var opener = self.opener();//此句调用父页面jsopen ...
- JMeter学习(十六)JMeter测试Java(二)(转载)
转载自 http://www.cnblogs.com/yangxia-test 实例: 服务为:将输入的两个参数通过IO存入文件: 1.打开MyEclipse,编写Java代码 服务: package ...
- SSM的例子-参考
ssm的例子:http://blog.csdn.net/double030/article/details/63683613
- vs中更改项目名称注意事项
1,项目属性中的所有需要改的地方,还有程序集名称. 2,解决方案用记事本打开更改启动路径. 3,重新加载即可.
- pta l2-10(排座位)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805066135879680 题意:给宴席排座位,有n个人,m个 ...
- Android 单元测试四大组件Activity,Service,Content Provider , Broadcast Receiver
先mark, 后补充 https://blog.csdn.net/stevenhu_223/article/details/14054313 https://www.jianshu.com/p/3aa ...