http://codeforces.com/contest/662/problem/C

题意:
n行m列01矩阵,每次可以反转一行或一列,问最后最少可以剩下多少个1

n只有20,把行状态压缩

操作奇数次相当于1次,操作偶数次相当于不操作

所以可以枚举对行的操作,将操作也状态压缩

A[i] 表示有多少列的状态为i

B[i] 表示 状态为i时的最优解,即fanzh

C[i] 表示 操作i的最优解

执行一次行操作相当于给某一列的状态异或上操作的状态

C[opt] = Σ A[state]*B[opt xor state]

(先执行这种行操作,如果某一列发现再执行一次列操作更优,那这一列再执行列操作,这通通包含在B数组里)

目前求C的复杂度为 2^2n

令 res = opt xor state

C[opt] = Σ(state) Σ(res)   [state xor res == opt] A[state]*B[res]

C[opt] = Σ(state) Σ(res)   [state xor opt == res] A[state]*B[res]

然后就可以用FWT 优化 成2^n * n

这还有个用子集反演的,是什么啊??

http://blog.csdn.net/QWsin/article/details/55054071

#include<cstdio>
#include<algorithm> using namespace std; typedef long long LL; char s[][]; LL a[],b[],c[]; int count(int i)
{
int sum=;
while(i) sum+=i&,i>>=;
return sum;
} void FWT_xor(LL *a,int n)
{
LL x,y;
for(int d=;d<n;d<<=)
for(int m=d<<,i=;i<n;i+=m)
for(int j=;j<d;++j)
{
x=a[i+j]; y=a[i+j+d];
a[i+j]=x+y; a[i+j+d]=x-y;
}
} void IFWT_xor(LL *a,int n)
{
LL x,y;
for(int d=;d<n;d<<=)
for(int m=d<<,i=;i<n;i+=m)
for(int j=;j<d;++j)
{
x=a[i+j]; y=a[i+j+d];
a[i+j]=x+y>>; a[i+j+d]=x-y>>;
}
} int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i) scanf("%s",s[i]+);
int state;
for(int i=;i<=m;++i)
{
state=;
for(int j=;j<=n;++j)
if(s[j][i]=='') state|=<<j-;
++a[state];
}
int S=<<n,sum;
for(int i=;i<S;++i)
{
sum=count(i);
b[i]=min(sum,n-sum);
}
FWT_xor(a,S);
FWT_xor(b,S);
for(int i=;i<S;++i) c[i]=a[i]*b[i];
IFWT_xor(c,S);
LL ans=n*m;
for(int i=;i<S;++i) ans=min(ans,c[i]);
printf("%I64d",ans);
}

Codeforces 662 C. Binary Table的更多相关文章

  1. CROC 2016 - Final Round [Private, For Onsite Finalists Only] C. Binary Table FWT

    C. Binary Table 题目连接: http://codeforces.com/problemset/problem/662/C Description You are given a tab ...

  2. 【CF662C】Binary Table(FWT)

    [CF662C]Binary Table(FWT) 题面 洛谷 CF 翻译: 有一个\(n*m\)的表格(\(n<=20,m<=10^5\)), 每个表格里面有一个\(0/1\), 每次可 ...

  3. 【CF662C】Binary Table 按位处理

    [CF662C]Binary Table 题意:给你一个$n\times m$的01网格,你可以进行任意次操作,每次操作是将一行或一列的数都取反,问你最多可以得到多少个1? $n\le 20,m\le ...

  4. [CF662C Binary Table][状压+FWT]

    CF662C Binary Table 一道 FWT 的板子-比较难想就是了 有一个 \(n\) 行 \(m\) 列的表格,每个元素都是 \(0/1\),每次操作可以选择一行或一列,把 \(0/1\) ...

  5. CF-1440C2 Binary Table (Hard Version) (构造,模拟)

    Binary Table (Hard Version) 题意 \(n*m(2\le n,m\le 100)\) 的01矩阵,每次可以选择一个宽度为2的子矩阵,将四个位置中的任意3个进行翻转,即0变1, ...

  6. CF662C Binary Table【FWT】

    CF662C Binary Table 题意: 给出一个\(n\times m\)的\(01\)矩阵,每次可以反转一行或者一列,问经过若干次反转之后,最少有多少个\(1\) \(n\le 20, m\ ...

  7. 「CF662C」 Binary Table

    「CF662C」 Binary Table 题目链接 题目所给的 \(n\) 很小,于是我们可以考虑这样一种朴素做法:暴力枚举第 \(i\) 行是否翻转,这样每一行的状态就确定了,这时取每一列 \(0 ...

  8. Codeforces #662C Binary Table

    听说这是一道$ Tourist$现场没出的题 Codeforces #662C 题意: 给定$n*m的 01$矩阵,可以任意反转一行/列($0$变$1$,$1$变$0$),求最少$ 1$的数量 $ n ...

  9. [CodeForces 663E] - Binary Table(FWT)

    题目 Codeforces 题目链接 分析 大佬博客,写的很好 本蒟蒻就不赘述了,就是一个看不出来的异或卷积 精髓在于 mask对sta的影响,显然操作后的结果为mask ^ sta AC code ...

随机推荐

  1. linux chroot 命令

    chroot,即 change root directory (更改 root 目录).在 linux 系统中,系统默认的目录结构都是以 /,即以根 (root) 开始的.而在使用 chroot 之后 ...

  2. nodeJs 接收请求参数和发送请求参数

    接收请求: request: (1) req.query (2) 导入中间件:var bodyParser = require('body-parser') req.body 响应: response ...

  3. 安全相关论文--Security and Dependability

    安全相关论文--Security and Dependability 所参考的文献来自于Kreutz D, Ramos F M V, Esteves Verissimo P, et al. Softw ...

  4. 对于beta发布的评论

    第一组:新蜂小组 题目:俄罗斯方块 评论:主体功能已经完成,可以流畅的进行游戏,看项目的完成度是最高的.他们不但把核心功能做出来了,界面也已基本完成. 第二组:Nice团队 题目:约跑APP(约吧) ...

  5. 【转载】Understanding When to use RabbitMQ or Apache Kafka

    https://content.pivotal.io/rabbitmq/understanding-when-to-use-rabbitmq-or-apache-kafka RabbitMQ: Erl ...

  6. Activiti随着Spring启动自动部署开关

    Activiti的act_re_deployment表NAME_列:全部显示SpringAutoDeployment. 查阅Activiti,https://github.com/Activiti/A ...

  7. Semantic Versioning Specification & 语义化版本

    Semantic Versioning Specification & 语义化版本 Semantic Versioning Specification http://semver.org 16 ...

  8. Jenkins配置项目构建后的钉钉通知

    首先在任意一个钉钉群里创建自定义的钉钉机器人,然后能够看到钉钉开放的webhook 复制webhook Jenkins中安装钉钉插件,然后在项目的配置当中,构建后操作里添加钉钉报警 url一般默认已经 ...

  9. bzoj1214 [HNOI2004]FTP服务器

    题目挺复杂的. 但有一点好,就是这题没数据,交个空程序就好了. begin end.

  10. Rabbitmq基本原理(转)

    https://www.cnblogs.com/jun-ma/p/4840869.html