kb-01-d<poj3279>--深搜变种,二进制优化;
2024-09-04 17:30:21
poj--3279
题意:
给n*m的矩阵,0 1组成,每次翻转一个格子可以将上下左右的五个节点翻转,求,把所有的格子翻转成0;输出每个个字的翻转次数;最少字数;
做法:
从上到下,第一行翻转的情况确定的话就全确定了;因此只要枚举第一行的翻转情况就可以了;
第一行翻转0次或1次;所以可以用二进制化,不用dfs了;具体看代码实现;
对于每一种第一行看需要翻转的次数是否是最小的;
代码如此:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define inf 0x3f3f3f3f
using namespace std;
int n,m,ans;
int a[][],vis[][]={},t[][]={},p[][]={,,,,,-,,,-,},an[][]={};
bool s[]; //vis数组用来记录主动翻转的情况;t数组用来记录一共翻转的次数;an数组用来记录最终结果;
int solve() //根据第一行的情况确定剩余所有行的情况;
{
for(int i=;i<m;i++)
{
if(vis[][i]==)
{
t[][i]++;
if(n>)
t[][i]++;
if(i<m-)
t[][i+]++;
if(i>)
t[][i-]++;
}
}
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(t[i-][j]%!=a[i-][j])
{
vis[i][j]=;
for(int z=;z<;z++)
{
int x=i+p[z][],y=j+p[z][];
t[x][y]++;
}
}
}
}
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(t[i][j]%!=a[i][j])
return ;
}
}
return ;
}
int main()
{
while(cin>>n>>m)
{
memset(a,,sizeof(a));
memset(vis,,sizeof(vis));
memset(t,,sizeof(t));
ans=inf;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
for(int i=;i<pow(2.0,m);i++)
{
memset(vis,,sizeof(vis));
for(int j=m-;j>=;j--)
{
s[j]=i&(<<j);
vis[][j]=s[j];
}
memset(t,,sizeof(t));
int temp=solve(),cou=;
if(temp==)
{
for(int i=;i<n;i++)
{
for(int j=m-;j>=;j--)
{
if(vis[i][j]==)
cou++;
}
}
if(cou<ans)
{
ans=cou;
for(int i=;i<n;i++)
{
for(int j=m-;j>=;j--)
an[i][j]=vis[i][j];
} }
}
}
if(ans!=inf)
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(j!=)
printf(" ");
printf("%d",an[i][j]);
}
printf("\n");
}
else
printf("IMPOSSIBLE\n");
} return ;
}
最新文章
- javaScript事件(一)事件流
- 使用paramiko如何连接服务器?
- Evolutionary Computing: Assignments
- {Links}{Matting}{Saliency Detection}{Superpixel}Source links
- idea启动tomcat失败,1099端口被占用
- 系统后台图表生成文档说明-javascript
- JavaMail回复
- iOS-模糊查询
- SQL之trigger(触发器)
- 实例讲解webpack的基本使用第二篇
- Dynamics CRM Plugin DLL恢复工具
- angular ng-repeat 动态获取的dom片段 显示
- 【Java入门提高篇】Day33 Java容器类详解(十五)PriorityQueue详解
- spring boot 微服务例子一
- System.Runtime.InteropServices.COMException: 检索 COM 类工厂中 CLSID 为 {0002E510-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80040154
- Java 之 POI各Jar包作用
- Windows 2008 Server搭建Radius服务器的方法
- python-social-auth with Django: ImportError: No module named &#39;social_django&#39; 解决方法
- Laravel框架 -- Validator 可用的验证规则
- IT行业面试指导 计算机行业面试技巧 面试技巧
热门文章
- Caused by: java.lang.ClassNotFoundException: org.springframework.web.socket.server.standard.ServerEndpointExporter
- groups - 显示用户所在的组
- xpath定位和css定位对比
- Ecshop首页购物车数量调取问题
- MySQL内置函数:IP地址点分式与数字转换函数(INET_ATON/INET_NTOA)
- 01_9_Struts用ModelDriven接收参数
- C# 用qq邮箱发邮件
- js cookie 操作
- 命令行下创建MySQL数据库与创建用户以及授权
- 【markdown】图片的处理