codeforces 425B Sereja and Table(状态压缩,也可以数组模拟)
给出一个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), 然后其余列变成和第一列相同或者相反。
//我不知道我这种模拟算不算是状态压缩
#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(状态压缩,也可以数组模拟)的更多相关文章
- codeforces 425B Sereja and Table (枚举、位图)
输入n*m的01矩阵.以及k. n,m<=100,k<=10 问修改至多k个,使得矩阵内的各连通块(连着的0或1构成连通块)都是矩形,且不含另外的数字(边界为0(1)的矩形内不含1(0)) ...
- [CodeForces 11D] A Simple Task - 状态压缩入门
状态压缩/Bitmask 在动态规划问题中,我们会遇到需要记录一个节点是否被占用/是否到达过的情况.而对于一个节点数有多个甚至十几个的问题,开一个巨型的[0/1]数组显然不现实.于是就引入了状态压缩, ...
- Codeforces 580D Kefa and Dishes(状态压缩DP)
题目链接:http://codeforces.com/problemset/problem/580/D 题目大意:有n盘菜每个菜都有一个满意度,k个规则,每个规则由x y c组成,表示如果再y之前吃x ...
- Codeforces 1383F - Special Edges(状态压缩+最大流)
Codeforces 题目传送门 & 洛谷题目传送门 首先暴力显然是不行的,如果你暴力最大流过了我请你吃糖 注意到本题的 \(k\) 很小,考虑以此为突破口解题.根据最大流等于最小割定理,点 ...
- CodeForces 380C Sereja and Brackets(扫描线+树状数组)
[题目链接] http://codeforces.com/problemset/problem/380/C [题目大意] 给出一个括号序列,求区间内左右括号匹配的个数. [题解] 我们发现对于每个右括 ...
- 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 ...
- Codeforces C. A Simple Task(状态压缩dp)
题目描述: A Simple Task time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- codeforces B - Preparing Olympiad(dfs或者状态压缩枚举)
B. Preparing Olympiad You have n problems. You have estimated the difficulty of the i-th one as inte ...
- codeforces 713A A. Sonya and Queries(状态压缩)
题目链接: A. Sonya and Queries time limit per test 1 second memory limit per test 256 megabytes input st ...
随机推荐
- openshift云计算平台diy模式安装Python2.7+Flask
主要翻译了链接1)的教程,加上一些个人研究,步骤如下: 1) 在openshift.redhat.com申请账号,安装git for windows,然后安装gem install rhc,这些比较容 ...
- webpack 学习笔记 02 快速入门
webpack 的目标 将依赖项分块,按需加载. 减少web app的初始加载时间. 使每一个静态集合都能够作为组件使用. 有能力集成第三方库,作为组件使用. 高度可配置化. 适用于大型项目. INS ...
- .NET开源工作流RoadFlow-表单设计-新建表单(属性设置)
点击表单设计工具栏上的 新建表单 按钮会弹出新表单属性设置框: 表单名称:新表单表名称. 数据连接:表单对应的数据库连接(此连接在 系统管理-->数据库连接 中维护). 数据表:表单对应的数据库 ...
- ext4.1动态生成多个checkboxgroup(或者radiogroup),并且有toolbar操作、
转载自:http://blog.csdn.net/zhengyuechuan/article/details/9327291 前台controller代码: Ext.define('zyc.contr ...
- 关于1>LINK : fatal error LNK1168: 无法打开 ....exe或者....dll进行写入的问题
我们用VS编译器运行我们的程序时候,可能会出现关于1>LINK : fatal error LNK1168: 无法打开 ...dll 进行写入或者是1>LINK : fatal err ...
- VC++ MFC 如何实现在编辑框中输出具有换行功能的文段 01
很久不来写东西了,昨天睡觉前写个小工具,突然,这玩意不会换行怎么整... 首先是第一步,获取字符串的长度,转载自白乔的文章. ------------------------------------- ...
- 在 mongodb 终端环境下写多行 javascript 代码、函数
工作中碰到一个问题,需要把某个 collection 中的某些符合条件的数据取出来,逐行处理其中某些字段.mongodb 终端下支持直接写 js 代码.函数,也可以运行 js 文件.1 首先需要设置 ...
- Ant学习---第四节:Ant属性的介绍
一.ant 属性设置,用 property 标签,详解如下: 特点 大小写敏感: 不可改变,先到先得,谁先设定,之后的都不能改变. 设置 1 .设置 name 和 value 属性值,比如: < ...
- OA Framework - How to Find the Correct Version of JDeveloper to Use with E-Business Suite 11i or Release 12.x (Doc ID 416708.1)
APPLIES TO: Oracle Applications Framework - Version 11.5.10.0 to 12.2.2 [Release 11.5.10 to 12.2] In ...
- Linux学习之路--启动VNC服务
我的Linux是Fedora 13,安装方法如下: 1.打开终端,执行 # yum install -y tigervnc tigervnc-server 2.编辑/etc/sysconfi/vncs ...