POJ3279 Fliptile —— 状态压缩 + 模拟

Express与MongoDB构建Web服务端全栈开发实战 在现代Web开发中,Express作为Node.js生态中最流行的Web框架,与MongoDB这一领先的NoSQL数据库组合,成为构建高性能服务端的黄金搭档。Express基于中间件管道和洋葱圈模型处理HTTP请求,而MongoDB的文档型数据模型和WiredTiger存储引擎为快速迭代的应用提供了灵活的数据存储方案。通过Mongoose ODM层,开发者可以像操作对象一样管理数据库文档,实现数据验证、关系建模等高级功能。这种技术栈特别适合需要快速开发RESTful API、实时应用或微服务架构的场景。本教 阅读详情

题目链接:http://poj.org/problem?id=3279


Fliptile
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 11771 Accepted: 4360

Description

Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He has arranged a brainy activity for cows in which they manipulate an M × N grid (1 ≤ M ≤ 15; 1 ≤ N ≤ 15) of square tiles, each of which is colored black on one side and white on the other side.

As one would guess, when a single white tile is flipped, it changes to black; when a single black tile is flipped, it changes to white. The cows are rewarded when they flip the tiles so that each tile has the white side face up. However, the cows have rather large hooves and when they try to flip a certain tile, they also flip all the adjacent tiles (tiles that share a full edge with the flipped tile). Since the flips are tiring, the cows want to minimize the number of flips they have to make.

Help the cows determine the minimum number of flips required, and the locations to flip to achieve that minimum. If there are multiple ways to achieve the task with the minimum amount of flips, return the one with the least lexicographical ordering in the output when considered as a string. If the task is impossible, print one line with the word "IMPOSSIBLE".

Input

Line 1: Two space-separated integers:  M and  N 
Lines 2.. M+1: Line  i+1 describes the colors (left to right) of row i of the grid with  N space-separated integers which are 1 for black and 0 for white

Output

Lines 1.. M: Each line contains  N space-separated integers, each specifying how many times to flip that particular location.

Sample Input

4 4
1 0 0 1
0 1 1 0
0 1 1 0
1 0 0 1

Sample Output

0 0 0 0
1 0 0 1
1 0 0 1
0 0 0 0

Source





题解:

1.枚举第一行的所有状态。
2.从第二行开始,如果当前瓦片的头上瓦片为1,那么需要翻转当前瓦片。因为在这一行之内,只有当前瓦片能够使头上的瓦片变为0,然后一直递推到最后一行。
3.分析:一开始想到方法是枚举,但是数据太大,计算机要算多少年真的不好估计。先假设枚举法是可行的, 相对于枚举法, 上述方法是有明显的优势的:上述方法从第二行开始,每翻转一块瓦片都是有针对性的、有目的性的;而枚举法则是盲目地翻转,如:假如当前瓦片为0,却还是硬要翻转该瓦片,那显然是行不通的。所以上述方法相对来说更“智能”。
4.注意:s&(1<<i)的值要么等于0,要么等于(1<<i);而不是0或1。应注意!!

5.此题的弱化版,可使用枚举法。POJ1753:http://blog.youkuaiyun.com/dolfamingo/article/details/54944929



代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <set>
#define ms(a,b) memset((a),(b),sizeof((a)))
using namespace std;
typedef long long LL;
const int INF = 2e9;
const LL LNF = 9e18;
const int MOD = 1e9+7;
const int MAXN = 15+10;

int M[MAXN][MAXN], subM[MAXN][MAXN];
int op[MAXN][MAXN], ans_op[MAXN][MAXN];
int n, m;

void press(int x, int y)
{
    op[x][y] = 1;
    subM[x][y] = !subM[x][y];
    if(x-1>=0) subM[x-1][y] = !subM[x-1][y];
    if(x+1<n)  subM[x+1][y] = !subM[x+1][y];
    if(y-1>=0) subM[x][y-1] = !subM[x][y-1];
    if(y+1<m)  subM[x][y+1] = !subM[x][y+1];
}

bool allZero()
{
    for(int i = 0; i<n; i++)
    for(int j = 0; j<m; j++)
        if(subM[i][j])  return false;
    return true;
}

void solve()
{
    int ans_step = INF;
    for(int s = 0; s<(1<<m); s++)
    {
        ms(op, 0);
        memcpy(subM, M, sizeof(subM));
        int step = 0;
        for(int i = 0; i<m; i++)
            if(s&(1<<i)) press(0, i), step++;

        for(int i = 1; i<n; i++)
        for(int j = 0; j<m; j++)
            if(subM[i-1][j])  press(i, j), step++;

        if(allZero() && ans_step>step )
        {
            ans_step = step;
            memcpy(ans_op, op, sizeof(ans_op));
        }
    }
    if(ans_step==INF)
        puts("IMPOSSIBLE");
    else
    {
        for(int i = 0; i<n; i++){
            for(int j = 0; j<m; j++)
                printf("%d ",ans_op[i][j]);
            putchar('\n');
        }
    }
}

int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(int i = 0; i<n; i++)
        for(int j = 0; j<m; j++)
            scanf("%d",&M[i][j]);

        solve();
    }
    return 0;
}




Mamba-YOLO训练前必看:从环境配置到数据集调整的完整流程 本文详细介绍了Mamba-YOLO目标检测框架的完整训练流程,包括环境配置、数据集优化和模型调参。从硬件准备到依赖安装,再到数据增强和超参数调整,提供了一系列实用技巧和常见问题解决方案,帮助开发者高效训练Mamba-YOLO模型,避免常见踩坑记录。 阅读详情

相关推荐

基于WebGL架构的3D可视化平台—平面图导航(一)

前言 利用CampusBuilder来搭建自己的虚拟世界过程有这样一个问题:如何快速聚焦到虚拟场景的某一位置。当然我们可以创建几个按钮对应查找我们需要去的位置(参照物)并聚焦,但是按钮并不是很炫酷也不能很好的反馈给我们一些信息。接下来我们就用平面导航图来解决这一问题。 第一步:使用CampusBuilder搭建模拟场景,CampusBuilder操作简单,分分钟就可以上手。 ...

nioooom的博客 4163

Poj 3279 & 1222(开关问题)

Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2648   Accepted: 1022 Description Farmer John knows that an intellectually satisfied cow is a happy

勿忘初衷 1311

COLMAP性能优化实战:如何用GPU加速和并行计算让重建速度提升300%

本文详细介绍了如何通过GPU加速、并行计算和参数调优显著提升COLMAP的三维重建效率。从硬件资源分配到计算流程优化,再到大型数据集的分块处理策略,全面解析了将重建速度提升300%以上的实用技巧,特别适合处理无人机航拍和室内扫描等大规模三维重建项目。

weixin_29098391的博客 202

POJ 3279 Fliptile 【棋盘翻转问题】【状态压缩】

Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16922   Accepted: 6194 Description Farmer John knows that an intellectually satisfied cow is a happy cow who wil...

Emiya丶的博客 1075

DDR内存条选购避坑指南:单Rank vs 双Rank性能实测对比(附2024年颗粒推荐)

本文深入解析了内存条中单Rank与双Rank设计的原理与性能差异。通过实战测试对比,揭示了双Rank内存在高负载场景(如3D渲染、视频剪辑)中凭借Rank Interleaving技术带来的显著性能优势,并提供了2024年针对不同用户需求的DDR4/DDR5内存选购策略与避坑指南。

ik678901的博客 1129

Robocup 仿真2D 学习笔记(二) 球队代码编译和上场

环境的一些问题 最近在使用rcssserver 和 rcssmonitor时可能会遇到./configure失败的问题,可以检查一下文件夹是否有makefile文件,如果是编译后的包直接sudo make install,如果还不行,还可以源码下载编译 rcssserver: https://sourceforge.net/projects/sserver/files/rcssserver/...

markchalse的博客 6014

POJ 3279 Fliptile(状态压缩+暴力)

题意: 给出最高15*15的0 1矩阵,每次可以翻转一个点,其相邻的4个点都被翻转,问最少翻转几次可以全部变为0。 解析: 枚举第一行的翻转所有翻转情况然后逐行向下更新,如果上一行是1的话,那么下面一行肯定要翻转,因为只有下面一行能影响上面一行。 最后判断一下,最后一行是不是都是0,如果都是,则维护最小的翻转次数。 AC代码:#include <cstdio> #include <cs

小G的ACM之路 3354

一文带你弄懂thermal governor IPA

当current temp < target temp时,使用k_pu,当current temp >= target temp时,使用k_po。如果current_temperature = switch_on_temp时,则k_p = k_pu,这时Pmax。如果current_temperature = target_temp时,则k_p = k_po,这时Pmax。2、解析dts,获得switch_on_temp和target_temp。3、初始化k_pu/k_po/k_i/k_d的常数。

yxw0609131056的博客 1245

[枚举] POJ 3279

黑白棋

Aria461863631的博客 318

第14.11章 高翔博士最新开源框架Lightning-LM源码解读(十一):离线定位模块全解析,从激光匹配到位姿图优化的极致优化

本文介绍了Lightning-LM离线定位模块的技术架构与实现细节。该模块基于3D激光雷达与IMU融合,采用改进版NDT匹配算法实现高精度定位,具备动态图层更新、多源信息融合等特性。核心流程包括数据预处理、激光里程计处理、IMU预测与点云去畸变、位姿图优化等环节,通过轻量级miao库实现高效增量优化。文章详细解析了模块的代码结构、关键函数功能及数据流,为SLAM系统的开发与优化提供了实践参考。

行知SLAM 375

2026年Java 开发工程师常见面试简答题

本文整理了Java开发工程师面试常见简答题及详细解析,涵盖Java基础、集合框架、并发编程、JVM等核心考点。主要内容包括:1. Java基础概念:JDK/JRE/JVM区别、面向对象特性、重载与重写、接口与抽象类、String特性等 2. 集合框架:ArrayList/LinkedList区别、HashMap实现原理、线程安全方案、集合类型对比 3. 并发编程:synchronized原理、volatile作用、线程创建方式、线程池参数与策略、死锁处理 4. JVM相关:内存区域划分、垃圾回收算法、类加载

不务正业的猿 370

POJ-3279-Fliptile【状态压缩】【DFS】【好题】

POJ-3279-Fliptile

Linoy 3658

pcie硬件时序分析实战(PHY层眼图测量)​

PCIe高速接口的信号完整性(SI)直接影响系统带宽和稳定性。其中,​。

xiaoheshang_123的博客 858

poj3279(状态压缩)

http://poj.org/problem?id=3279 Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10085   Accepted: 3740 Description Farmer John knows that an i

ACZone 361

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【POJ 3279 Fliptile】开关问题,模拟

题目链接:http://poj.org/problem?id=3279 题意:给定一个n*m的坐标方格,每个位置为黑色或白色。现有如下翻转规则:每翻转一个位置的颜色,与其四连通的位置都会被翻转,但注意只扩散一圈,不是连锁反应。 求最少翻转几个位置能够使所有n*m个位置都变为白色。若有解,求字典序最小的翻转方案(给出每个位置的翻转次数)。 数据范围:n, m 属于 [1, 15] 思路:我们...

weixin_30711917的博客 98

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Fliptile POJ - 3279 (状态压缩+枚举) && Flip Game POJ - 1753(状态压缩+bfs暴力)

看Fliptile前我们先做Flip Game,后者相当于是前者的简化版 Flip Game题目链接https://vjudge.net/problem/16122/origin题目大意给你4*4的01矩阵,当你翻转一个数时,其四周的所有数都取反,问你最少经过多少次翻转可以使所有数都为0或1核心思想由于矩阵仅仅是4*4的固定规模,我们只需用一个int型的数进行状态压缩就能存下当前的状态,然后用bfs

lin的博客 822

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

poj 3279 Fliptile 枚举 模拟

题目 题目链接:http://poj.org/problem?id=3279 题目来源:《挑战》例题。 简要题意:踩一个点翻转周围五个点,求全翻成白色的方案中残砖次数最少而且字典序最小的。

ned_chu的博客 408

POJ - 3279 Fliptile (状压dp)

题意:题意给你mxn的01矩阵可以进行翻动某个坐标,但同时会翻动其周围(上下左右的位置),问如何最少次翻动将所有翻转到0 ,并打印出翻转的图像思路:我们可以用dfs来暴力搜索,当然也可以使用状压dp。刚好我也在做状压dp的专题所以参考了别人怎么用状压去写,然而总感觉他们写的是模拟...并且有点注释也没有写清楚,看了很久(可能是我太蠢) 当然后面看懂了,并且用两种方法去把它写了(但是总感...

174

poj 3279 Fliptile

题意:一个n * m的棋盘,0或1,每次改变一个格子时同时改变上下左右的格子,问用最少次数将棋盘全变成0的策略。题解:用二进制压缩第一行更改的状态,之后遍历棋盘,如果当前格子为1则改变下方的格子,记录改变次数最小的状态为ans,最后模拟一次ans状态时的策略并输出。代码:#include<stdio.h> #include<iostream> #include<algorithm> #include

逗比的日常 496

状态压缩(2)+模拟枚举(2)--poj3279(能力题)

Fliptile TimeLimit:2000MS    Memory Limit:65536KB    64bit IO Format:%lld & %llu Description Input

Sly_461的博客 986

Enum:Fliptile(POJ 3279)

                                   Fliptile   题目大意:农夫想要测牛的智商,于是他把牛带到一个黑白格子的地,专门来踩格子看他们能不能把格子踩称全白   这一题其实就是一个枚举题,只是我们只用枚举第一行就可以了,因为这一题有点像开关一样,一个翻了,另一个就要跟着一起翻,第一行会影响下面所有行,而且影响情况只有一种,所以枚举完了以后我们不断模拟就可以...

weixin_30849403的博客 75

Poj 3279 Fliptile(反转/开关问题)

题意:给定一个N*M的矩形,每个点上的值为0或1,0表示该点为白色棋子,1表示该点为黑色棋子。当改变一个棋子的颜色时,会连同它上下左右四个棋子共同变色。问:最少变换几次能将所有棋子都变为黑色;若有多组最小值相等的解,输出字典序最小的那个。 思路: 对于这样的变换来说,有两点可以总结: 一、反转顺序的交换对结果没有影响; 二、对一个点进行两次反转后结果不变。 好好的矩阵说着说着要求

Stupid_Turtle的博客 680

POJ 3279 Fliptile[二进制状压DP]

题目链接【http://poj.org/problem?id=3279】 题意:给出一个大小为M*N(1 ≤M≤ 15; 1 ≤N≤ 15) 的图,图中每个格子代表一个灯泡,mp[i][j] = 0;表示(i,j)这盏灯灭,反之则亮。如果把反转(i,j)等的开关,那么这个灯和他上下左右的等都会变成原来相反的的状态。 问:用最少的使用开关的次数使得灯全部被熄灭。 思路:用0,...

weixin_30746117的博客 136

POJ - 3279 Fliptile(DFS,经典翻转问题,二进制枚举)

题目描述 给你一个01矩阵,矩阵大小为M x N。(1 <= M , N <= 15) 每次操作选择一个格子,使得该格子与上下左右四个格子的值翻转。 至少多少次操作可以使得矩阵中所有的值变为0? 请输出翻转方案,若没有方案,输出"IMPOSSIBLE” 。 输入格式 第一行输入两个数:M和N。(1 <= M , N <= 15) 接下来M行,每行N个数,其值只为0或1。 输...

Irimsky 400
上一篇: POJ1077 Eight —— IDA*算法
下一篇: POJ1426 Find The Multiple —— BFS
DOLFAMINGO
博客等级 码龄10年 8粉丝 216原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值