题目

给出一个n*m的01矩阵, 让你最多改变k个里面的值(0变1,1变0), 使得0、1的连通分量是矩阵。输出最少步数

1 ≤ n, m ≤ 100; 1 ≤ k ≤ 10

题解:

如果01连通分量是矩形,

那么矩形一定是这样的:

0101010

1010101

0101010

1010101

(上面的01代表子矩阵块)。

也就是每一行要么是相同,要么是相反的。

如果n>k, 肯定有一行是不能改变的,那么枚举这一行,然后其余的要么变相同,要么变相反,看最少的步数。

如果n<k ,那么可以枚举第一列的状态(2^k), 然后其余列变成和第一列相同或者相反。

以上引用自:http://www.cnblogs.com/kuangbin/p/3702113.html

//我不知道我这种模拟算不算是状态压缩

#include <cstdio>
#include<iostream>
#include <cstring>
#include <algorithm>
#include<vector>
using namespace std;
int k,n,m;
int a[][]; int min(int x,int y)
{
if(x<y)return x;
return y;
} int meijuh()
{
int minn=;
for(int i=;i<k+;i++)
{
int ans=;
for(int ii=;ii<n;ii++)
{
if(i!=ii)
{
int sa=,di=;
for(int j=;j<m;j++)
{
if(a[i][j]==a[ii][j])
sa++;
else
di++;
}
ans+=min(sa,di);
}
}
minn=min(minn,ans);
}
return minn;
}
int meijul()
{
int er[][];
for(int i=;i<;i++)er[i][]=i&;
for(int i=;i<;i++)for(int j=;j<;j++)er[i*+j][]=i&;
for(int i=;i<;i++)for(int j=;j<;j++)er[i*+j][]=i&;
for(int i=;i<;i++)for(int j=;j<;j++)er[i*+j][]=i&;
for(int i=;i<;i++)for(int j=;j<;j++)er[i*+j][]=i&;
for(int i=;i<;i++)for(int j=;j<;j++)er[i*+j][]=i&;
for(int i=;i<;i++)for(int j=;j<;j++)er[i*+j][]=i&;
for(int i=;i<;i++)for(int j=;j<;j++)er[i*+j][]=i&;
for(int i=;i<;i++)for(int j=;j<;j++)er[i*+j][]=i&;
for(int i=;i<;i++)for(int j=;j<;j++)er[i*+j][]=i&;
for(int i=;i<;i++)for(int j=;j<;j++)er[i*+j][]=i&; int minn=;
for(int i=;i<(<<n);i++)
{
int ans=;
for(int j=;j<m;j++)
{
int sa=,di=;
for(int ii=;ii<n;ii++)
{
if(er[i][ii]==a[ii][j])
sa++;
else di++;
}
ans=ans+min(sa,di);
}
minn=min(minn,ans);
}
return minn;
} int main() { cin >>n>>m>>k;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
cin >>a[i][j];
int minn=;
if(n>k)
{
minn = meijuh();
}
else
{
minn=meijul();
}
if(minn<=k)
cout << minn<<endl;
else
cout <<-<<endl;
return ;
}

codeforces 425B Sereja and Table(状态压缩,也可以数组模拟)的更多相关文章

  1. codeforces 425B Sereja and Table (枚举、位图)

    输入n*m的01矩阵.以及k. n,m<=100,k<=10 问修改至多k个,使得矩阵内的各连通块(连着的0或1构成连通块)都是矩形,且不含另外的数字(边界为0(1)的矩形内不含1(0)) ...

  2. [CodeForces 11D] A Simple Task - 状态压缩入门

    状态压缩/Bitmask 在动态规划问题中,我们会遇到需要记录一个节点是否被占用/是否到达过的情况.而对于一个节点数有多个甚至十几个的问题,开一个巨型的[0/1]数组显然不现实.于是就引入了状态压缩, ...

  3. Codeforces 580D Kefa and Dishes(状态压缩DP)

    题目链接:http://codeforces.com/problemset/problem/580/D 题目大意:有n盘菜每个菜都有一个满意度,k个规则,每个规则由x y c组成,表示如果再y之前吃x ...

  4. Codeforces 1383F - Special Edges(状态压缩+最大流)

    Codeforces 题目传送门 & 洛谷题目传送门 首先暴力显然是不行的,如果你暴力最大流过了我请你吃糖 注意到本题的 \(k\) 很小,考虑以此为突破口解题.根据最大流等于最小割定理,点 ...

  5. CodeForces 380C Sereja and Brackets(扫描线+树状数组)

    [题目链接] http://codeforces.com/problemset/problem/380/C [题目大意] 给出一个括号序列,求区间内左右括号匹配的个数. [题解] 我们发现对于每个右括 ...

  6. Codeforces Round #235 (Div. 2) D. Roman and Numbers (数位dp、状态压缩)

    D. Roman and Numbers time limit per test 4 seconds memory limit per test 512 megabytes input standar ...

  7. Codeforces C. A Simple Task(状态压缩dp)

    题目描述:  A Simple Task time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  8. codeforces B - Preparing Olympiad(dfs或者状态压缩枚举)

    B. Preparing Olympiad You have n problems. You have estimated the difficulty of the i-th one as inte ...

  9. codeforces 713A A. Sonya and Queries(状态压缩)

    题目链接: A. Sonya and Queries time limit per test 1 second memory limit per test 256 megabytes input st ...

随机推荐

  1. eclipse新建android项目,编译出错解决方法

    1.新建android项目 2.在libs中,将android-support-v4.jar添加到生成目录 3.如果项目引用了ActionBar等,需要引用V7的话,添加外部Jar包,路径为eclip ...

  2. DB2查看用户表与指定用户表表结构

    1.在dos中查看用户表 1.1查看表 DB2 LIST TABLES FOR USER 1.2 查看表结构 DB2 describe table A 2.在DB2连接工具中(这里以SQLdbx为例子 ...

  3. oracle 11g 分区表

    查看所有用户分区表及分区策略(1.2级分区表均包括): SELECT p.table_name AS 表名, decode(p.partitioning_key_count, 1, '主分区') AS ...

  4. 人脸检测的API例子

    package cliu.TutorialOnFaceDetect; /* * MyImageView.java * Download by http://www.codefans.net * [AU ...

  5. Effective Objective-C 2.0之Note.04

    “类族”(class cluster)是一种很有用的模式(pattern),可以隐藏“抽象基类”(abstract base class)背后的实现细节.Objective-C的系统框架中普遍使用此模 ...

  6. RSA和DES------加密和解密类

    public class CryptogramUtil { //******************************************************************** ...

  7. winform 表单正则表达式验证 示例(ValidationRule)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. 前端开发规范之html编码规范

    原则1.规范 .保证您的代码规范,趋html5,远xhtml,保证结构表现行为相互分离.2.简洁.保证代码的最简化,避免多余的空格.空行,保持代码的语义化,尽量使用具有语义的元素,避免使用样式属性和行 ...

  9. Matlab实现抽样定理

    Matlab实现抽样定理 正弦信号的抽样: 首先时间跨度选择 -0.2 到 0.2,间隔0.0005取一个点,原信号取 sin⁡(2π*60t) ,则频率为60Hz. 由于需要输出原始信号的波形,我选 ...

  10. iTween基础之CameraFade(摄像机淡入淡出)

    一.基础介绍:二.基础属性 原文地址: http://blog.csdn.net/dingkun520wy/article/details/50896420 一.基础介绍 CameraTexture: ...