【BZOJ 1647】[Usaco2007 Open]Fliptile 翻格子游戏 模拟、搜索
第一步我们发现对于每一个格子,我们只有翻和不翻两种状态,我们发现一旦确定了第一行操作,那么第二行的操作也就随之确定了,因为第一行操作之后我们要想得到答案就得把第一行全部为0,那么第二行的每一个格子的操作都会对应于其上的格子的改变,而且也只有第二行能救他了。因此我们只要知道第一行的操作其他的就全都可以推知了,于是我们就用状压枚举第一行的操作,因为这是天然字典序。
#include <cstdio>
#include <iostream>
using namespace std;
int A[],n,m,a[],full,b[],ANS[],god,Ans=0x7fffffff;
int main(){
scanf("%d%d",&m,&n);
full=(<<n)-;
for(register int i=,x;i<=m;i++){
for(register int j=;j<=n;j++)
scanf("%d",&x),a[i]|=(x<<(n-j));
}
if(n==)
{
b[]=;
}
else
{
b[]=;
for(register int i=;i<n;i++)
b[i]=(<<i)|(<<(i-))|(<<(i-));
b[n]=(<<(n-))|(<<(n-));
}
for(register int k=;k<=full;k++)
{
register int now=a[],p=k,sum=;
A[]=k;
for(register int i=;i<=n;i++)
if(k&(<<(i-)))now^=b[i],sum++;
p=now;
for(register int i=;i<=m;i++)
{
now=a[i];
A[i]=p;
for(register int j=;j<=n;j++)
if(A[i-]&(<<(j-)))now^=(<<(j-));
for(register int j=;j<=n;j++)
if(p&(<<(j-)))now^=b[j],sum++;
p=now;
}
if(!p)
{
god=;
if(sum<Ans)
{
for(register int i=;i<=m;i++)ANS[i]=A[i];
Ans=sum;
}
}
}
if(god)
{
for(int i=;i<=m;i++)
{
for(int j=n;j>;j--)
{
if(ANS[i]&(<<(j-)))
printf("1 ");
else
printf("0 ");
}
puts("");
}
return ;
}
printf("IMPOSSIBLE");
}
【BZOJ 1647】[Usaco2007 Open]Fliptile 翻格子游戏 模拟、搜索的更多相关文章
- BZOJ 1647 [Usaco2007 Open]Fliptile 翻格子游戏:部分枚举 位运算
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1647 题意: 在一个n*m(1 <= n,m <= 15)的棋盘上,每一个格子 ...
- bzoj 1647: [Usaco2007 Open]Fliptile 翻格子游戏【dfs】
这个可以用异或高斯消元,但是我不会呀我用的暴搜 2的m次方枚举第一行的翻转情况,然后后面的就定了,因为对于一个j位置,如果i-1的j位置需要翻,那么一定要翻i的j,因为这是i-1的j最后翻的机会 按字 ...
- 1647: [Usaco2007 Open]Fliptile 翻格子游戏
1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 423 Solved: 173[ ...
- 【BZOJ】1647: [Usaco2007 Open]Fliptile 翻格子游戏(暴力)
http://www.lydsy.com/JudgeOnline/problem.php?id=1647 自己太弱...看题解.. 竟然是枚举第一行的放法,,,因为一定要全部变0,所以将前一行1的在这 ...
- [Usaco2007 Open]Fliptile 翻格子游戏
[Usaco2007 Open]Fliptile 翻格子游戏 题目 Farmer John knows that an intellectually satisfied cow is a happy ...
- [Usaco2007 Open]Fliptile 翻格子游戏题解
问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec 内存限制: 128 MB 题目描述 Farmer John knows that an intell ...
- [Usaco2007 Open]Fliptile 翻格子游戏 状态压缩
考试想到了状压,苦于T1废掉太长时间,于是默默输出impossible.. 我们知道,一个格子的翻转受其翻转次数和它相邻翻转次数的影响. 由每一个位置操作两次相当于把它翻过来又翻回去,所以答案中每一个 ...
- [Usaco2007 Open]Fliptile 翻格子游戏 状压dp
n,m<=15,直接搞肯定不行,考虑一行一行来, 每一行的状态只与三行有关,所以从第一行开始枚举,每一次让下面一行填上他上面那行的坑 最后一行必须要同时满足他自己和他上面那行,否则舍去 #inc ...
- [BZOJ 1647][USACO 2007 Open] Fliptile 翻格子游戏
1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 702 Solved: 281[ ...
随机推荐
- C语言运算符优先级和结合性
运算符优先级和结合性 优先级 运算符 结合性 ...
- 为什么我要放弃javaScript数据结构与算法(第一章)—— JavaScript简介
数据结构与算法一直是我算比较薄弱的地方,希望通过阅读<javaScript数据结构与算法>可以有所改变,我相信接下来的记录不单单对于我自己有帮助,也可以帮助到一些这方面的小白,接下来让我们 ...
- mutation与vuex区别
vuex- action 1.当点发送过快,页面中渲染的内容与state中的数据不一致,vuex里面的state变得慢,且不持续更新 2.action中是可以做到页面中state中数据保持一致 责 ...
- poorpool 的 考场 NOI Linux 配置
把~/.bashrc里的force_color_prompt=yes前面那个#去掉,终端就有高亮啦qwq!(然后source一下 然后vim ~/.vimrc然后加入 (为什么不改/etc/vim/v ...
- 小程序如何去掉button组件的边框
小程序获取用户授权不再支持wx.getUserInfo方法,改为用button获取,格式如下 <button class="btn btn" open-type=" ...
- 实现一个简单版的express
express应该算是早期最优秀的一个node框架了,刚开始学node做后端语言就是用的express,它的cli可以帮我们搭建好项目目录,就像现在的vue,react一样.express本身没有做太 ...
- 数据库sql命令
本文为转载,原文地址:http://www.cnblogs.com/cangqiongbingchen/p/4530333.html 1.说明:创建数据库CREATE DATABASE databas ...
- 使用git创建分支
Git大法好--3.Git分支本地操作详解 这时已经切换到了dingBranch分支下面了,在项目文件夹下添加一个dingBranchtest.txt文件,然后提交到本地仓库和远程仓库: git ad ...
- CS229作业之过拟合
一.使用循环: 1.1原始版逻辑回归: function g = sigmoid(z) g = zeros(size(z)); g = ./ ( + exp(-z)); end function [J ...
- 有向图的强连通分量——kosaraju算法
一.前人种树 博客:Kosaraju算法解析: 求解图的强连通分量