最近在刷kuangbin神犇的各种套题。。。。感觉自己好弱啊。。。。。还是要多多训练,跟上大神的脚步。最近的这十几题都比较水,记下来这一条我比较印象深刻、也比较难的题目吧(之后应该不会再有水题写了,珍惜水题啊QAQ)

思考

题目其实很简单,踩黑白啊,而且规模也不算大。问题在于我们怎么穷举。注意到一个问题,我们对单行中先后变换的次序其实不改变最后的结果。也就是说,对于单列的变换,其实我们可以纯粹的只考虑上下带来的影响。而又注意到每行实际上只影响上下单行,所以我们可以规定一个处理的方向(如从上而下),那么我们每次只需要考虑最新的一行对上面一行带来的影响了。需要注意的是,这种思想我们之后估计会经常用到。(不过本菜狗估计还是做不对emmmmm

这题就是这个思路。穷举第一行的踩踏方式,那么会产生有黑有白。对上一行的黑,只能有此列的下一行来处理,因此我们逐行处理就行了。最后看最后一行合不合法即可。保存最小数据。

代码

#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
#include <set>
using namespace std; int maze[18][18],step[18][18];
int dx[]={0,-1,1,0,0};
int dy[]={0,0,0,-1,1};
int m,n;
int judge(int val)
{
int tmpmaze[18][18];
memcpy(tmpmaze,maze,sizeof(maze));
int cnt=0;
memset(step,0,sizeof(step));
for(int i=1;i<=m;++i)
{
if(i==1) for(int j=1;j<=n;++j)
{
if((val>>(n-j))&1)
{
step[i][j]++;cnt++;
for(int k=0;k!=5;++k)
{
int tx=i+dx[k],ty=j+dy[k];
if(tx>=1 && tx<=m && ty>=1 && ty<=n)
tmpmaze[tx][ty]^=1;
}
}
}
else for(int j=n;j>=1;--j)
{
if(tmpmaze[i-1][j])
{
step[i][j]++;cnt++;
for(int k=0;k!=5;++k)
{
int tx=i+dx[k],ty=j+dy[k];
if(tx>=1 && tx<=m && ty>=1 && ty<=n)
tmpmaze[tx][ty]^=1;
}
}
}
}
for(int i=1;i<=n;++i) if(tmpmaze[m][i]) return -1;
return cnt;
}
int main()
{
while(cin>>m>>n)
{
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
cin>>maze[i][j];
int minans=0x3f3f3f3f,minstep[18][18];
memset(minstep,0,sizeof(minstep));
for(int i=0;i!=(1<<n);++i)
{
int ans=judge(i);
if(ans!=-1 && minans>ans)
{
memcpy(minstep,step,sizeof(step));
minans=ans;
}
}
if(minans==0x3f3f3f3f)
cout<<"IMPOSSIBLE"<<endl;
else for(int i=1;i<=m;++i)
{
for(int j=1;j<=n;++j)
cout<<minstep[i][j]<<" ";
cout<<endl;
}
}
return 0;
}

【个人训练】(POJ3279)Fliptile的更多相关文章

  1. POJ3279 Fliptile —— 状态压缩 + 模拟

    题目链接:http://poj.org/problem?id=3279 Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submiss ...

  2. POJ3279 Fliptile(暴力)

    有一种暴力是这样的,枚举一边,确定另一边. 这一题是这么解的,枚举第一行所有翻转情况,然后剩下几行其实是确定的,因为前i行翻转方式确定后只能通过第i+1行的翻转来改变第i行的状态,于是依次模拟求出剩下 ...

  3. [POJ3279]Fliptile(开关问题,枚举)

    题目链接:http://poj.org/problem?id=3279 题解:http://www.cnblogs.com/helenawang/p/5538547.html /* ━━━━━┒ギリギ ...

  4. POJ3279 Fliptile 枚举+简单搜索

    题意:一个矩阵,每个点1或0,然后每次翻一个点,它周围上下左右(包括自己)1->0,0->1,问最少翻几次可以矩阵全是0,忽略题目说的字典序 分析:枚举第一行所有的情况,然后下面几行也随之 ...

  5. POJ-3279.Fliptile(二进制状态压缩 + dfs) 子集生成

    昨天晚上12点刷到的这个题,一开始一位是BFS,但是一直没有思路.后来推了一下发现只需要依次枚举第一行的所有翻转状态然后再对每个情况的其它田地翻转进行暴力dfs就可以,但是由于二进制压缩学的不是很透, ...

  6. poj3279 Fliptile

    思路: 枚举. 枚举了第一行的操作之后,下面每行的操作也随之确定了.因为在确定了第i行的操作之后,要想再改变a[i][j]的状态只能通过改变a[i + 1][j]来实现.另外,用到了集合的整数表示方法 ...

  7. Fliptile POJ-3279 DFS

    题目链接:Fliptile 题目大意 有一个01矩阵,每一次翻转(0->1或者1->0)一个元素,就会把与他相邻的四个元素也一起翻转.求翻转哪些元素能用最少的步骤,把矩阵变成0矩阵. 思路 ...

  8. Fliptile [POJ3279] [开关问题]

    题意 给定一张n*m的方格图,有1,0两种数字,每次可以选取一个十字进行翻转,1变成0,0变成1,问最少需要翻转几次,使它全部变成0,全部如果有重复的,按字典序最小的进行输出: 输入 第一行n,m 下 ...

  9. (POJ-3279)Fliptile (dfs经典---也可以枚举)

    Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He ha ...

随机推荐

  1. ASP.NET整体运行机制+asp.net请求管道+页面生命周期

  2. 【luogu P2863 [USACO06JAN]牛的舞会The Cow Prom】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2863 求强连通分量大小>自己单个点的 #include <stack> #include ...

  3. WebStorm中Node.js项目配置教程——项目设置

    上一章讲解了Node.js项目在WebStorm中的两种创建方式,当完成Node.js项目创建以后,剩下的就是涉及配置设置工作. 为了确保Node.js全局和Node.js核心模块的代码完成功能,打开 ...

  4. vue 修改框架less变量

    以vant框架为例,vue项目以less作为css处理器: less/var-reset.less @import '~vant/lib/index.less'; // Color variables ...

  5. oracle聚簇表的理解 (转自:https://blog.csdn.net/gumengkai/article/details/51009345 )

    Oracle支持两种类型的聚簇:索引聚簇和哈希聚簇 一.索引聚簇表的原理 聚簇:如果一些表有一些共同的列,则将这样一组表存储在相同的数据块中 聚簇还表示把相关的数据存储在同一个块上.利用聚簇,一个块可 ...

  6. Linux 安装 python 指定版本--编译源码方式

    自动化脚本: #!/bin/bash sudo apt-get update sudo apt-get install -y gcc make build-essential libssl-dev z ...

  7. mybatis笔记之一次插入多条数据sql语句写法

    <insert id="insertList" parameterType="java.util.List"> insert into balanc ...

  8. sqlite内存数据库和文件数据库的同步[转]

    由于sqlite对多进程操作支持效果不太理想,在项目中,为了避免频繁读写 文件数据库带来的性能损耗,我们可以采用操作sqlite内存数据库,并将内存数据库定时同步到文件数据库中的方法. 实现思路如下: ...

  9. 使用jQuery实现数字逆时针旋转

    要实现数字逆转,最主要是分析我们页面的元素结果,结合选择器充分利用起来! 例如:以下lable中每一个id和值的安排具有一定结构的意义需要用心分析: jQuery代码:

  10. Vue2+VueRouter2+webpack+vue-cil构建完整项目实例(附:详细步骤截图)

    引用1:https://segmentfault.com/a/1190000008557578 引用2:https://blog.csdn.net/wulala_hei/article/details ...