CF662C Binary Table FWT
\(N \leq 20\)很小诶
一个暴力的思路是枚举行的翻转状态然后在列上贪心
复杂度为\(O(2^NM)\)显然过不去
考虑到可能有若干列的初始状态是一样的,那么在任意反转之后他们贪心的策略肯定是相同的
考虑状压,设\(f_i\)表示初始状态为\(i\)的列的个数,\(g_i\)表示经过行反转,某一列到达\(i\)状态时,这一列留下的最少的\(1\)的可能个数,\(h_i\)表示行翻转状态为\(i\)时的答案
那么\(h_i = \sum\limits_{j\ xor\ k = i}f_jg_k\),是一个异或卷积的形式,FWT即可。
#include<bits/stdc++.h>
using namespace std;
long long cnt1[1 << 20] , mn[1 << 20] , times[1 << 20] , ans[1 << 20] , num[100007] , N , M;
void FWT_xor(long long* arr , int type){
    for(int i = 1 ; i < 1 << N ; i <<= 1)
        for(int j = 0 ; j < 1 << N ; j += (i << 1))
            for(int k = 0 ; k < i ; ++k){
                long long x = arr[j + k] , y = arr[i + j + k];
                arr[j + k] = x + y;
                arr[i + j + k] = x - y;
                if(type == -1){
                    arr[j + k] >>= 1;
                    arr[i + j + k] >>= 1;
                }
            }
}
inline char getc(){
    char c = getchar();
    while(!isdigit(c))
        c = getchar();
    return c;
}
int main(){
    cin >> N >> M;
    for(int i = 1 ; i <= N ; ++i)
        for(int j = 1 ; j <= M ; ++j)
            num[j] = (num[j] << 1) + getc() - 48;
    for(int i = 1 ; i <= M ; ++i)
        ++times[num[i]];
    for(int i = 1 ; i < 1 << N ; ++i)
        cnt1[i] = cnt1[i - (i & -i)] + 1;
    for(int i = 1 ; i < 1 << N ; ++i)
        mn[i] = min(cnt1[i] , cnt1[((1 << N) - 1) ^ i]);
    FWT_xor(mn , 1);
    FWT_xor(times , 1);
    for(int i = 0 ; i < 1 << N ; ++i)
        ans[i] = mn[i] * times[i];
    FWT_xor(ans , -1);
    long long all = M * N;
    for(int i = 0 ; i < 1 << N ; ++i)
        all = min(all , ans[i]);
    cout << all;
    return 0;
}												
											CF662C Binary Table FWT的更多相关文章
- [CF662C Binary Table][状压+FWT]
		
CF662C Binary Table 一道 FWT 的板子-比较难想就是了 有一个 \(n\) 行 \(m\) 列的表格,每个元素都是 \(0/1\),每次操作可以选择一行或一列,把 \(0/1\) ...
 - CF662C Binary Table【FWT】
		
CF662C Binary Table 题意: 给出一个\(n\times m\)的\(01\)矩阵,每次可以反转一行或者一列,问经过若干次反转之后,最少有多少个\(1\) \(n\le 20, m\ ...
 - 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 ...
 - CF662C Binary Table  【状压 + FWT】
		
题目链接 CF662C 题解 行比较少,容易想到将每一列的状态压缩 在行操作固定的情况下,容易发现每一列的操作就是翻转\(0\)和\(1\),要取最小方案,方案唯一 所以我们只需求出每一种操作的答案 ...
 - CF662C Binary Table 枚举 FWT
		
题面 洛谷题面 (虽然洛谷最近有点慢) 题解 观察到行列的数据范围相差悬殊,而且行的数量仅有20,完全可以支持枚举,因此我们考虑枚举哪些行会翻转. 对于第i列,我们将它代表的01串提取出来,表示为\( ...
 - CF662C Binary Table (FWT板题)
		
复习了一发FWT,发现还挺简单的... 没时间写了,就放一个博客吧:Great_Influence 的博客 注意这一句ans[i]=∑j⊗k=if[j]∗dp[k]ans[i]= ∑_{j⊗k=i} ...
 - CF662C Binary Table (快速沃尔什变换FWT)
		
题面 题解 我们会发现,如果单独的一列或一行,它的答案是O1确定的,如果确定了每一行是否变换,那么最后的答案也就简单了许多, 如果确定了行的变换状压下来是x(即x的i位表示第i行是否变换,理解就行), ...
 - [CF662C] Binary Table(FWT)
		
题意: https://www.cnblogs.com/cjyyb/p/9065801.html 题解:
 - CodeForces - 662C Binary Table (FWT)
		
题意:给一个N*M的0-1矩阵,可以进行若干次操作,每次操作将一行或一列的0和1反转,求最后能得到的最少的1的个数. 分析:本题可用FWT求解. 因为其0-1反转的特殊性且\(N\leq20\),将每 ...
 
随机推荐
- 【读书笔记】iOS-访问iPod媒体库
			
iOS设备内部都有一个iPod媒体库,在这个媒体库中包含了音频和视频文件,它的来源主要是苹果公司的iTunes Store,现在苹果公司的iTunes Store内容很多,但能够下载到iPod媒体库的 ...
 - Apex单元测试
			
单元测试类 Salesforce中为Apex语言提供了完整的单元测试流程,包括单元测试类.测试的运行和结果分析等. 单元测试类是一种特殊的Apex类,基本语法和普通的Apex类一样. 单元测试类的结构 ...
 - Android Color颜色代码
			
常用颜色代码 <?xml version="1.0" encoding="utf-8"?> <resources> <color ...
 - MyBatis学习——分步查询与延迟加载
			
声明:面试是遇到延迟加载问题,在网页搜索到此篇文章,感觉很有帮助,留此学习之用! 一.分步查询 分步查询通常应用于关联表查询,如:电商平台,查询订单信息时需要查询部分的用户信息:OA系统查询个人信息时 ...
 - Spring Boot 静态页面
			
spring boot项目只有src目录,没有webapp目录,会将静态访问(html/图片等)映射到其自动配置的静态目录,如下 /static /public /resources /META-IN ...
 - Python & 机器学习之项目实践
			
机器学习是一项经验技能,经验越多越好.在项目建立的过程中,实践是掌握机器学习的最佳手段.在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的. 预测模型项目模板不能 ...
 - Linux远程访问及控制(SSH)
			
1.ssh协议:用于远程登录,端口号:22/tcp 配置文件: 1)服务器端口:/etc/ssh/sshd_config 2)客户端 :/etc/ssh/ssh_config 2.服务器监听选项: U ...
 - window下上传文件至linux(windows下如何访问linux)
			
========相信我,按照步骤来一定能成功====== 我将从三个方面来说明:为什么要搭建访问服务器.如何搭建访问服务器.windows如下访问 为什么要搭建访问Linux服务器 我们都知道,服务器 ...
 - 3星|《AI极简经济学》:AI的预测、决策、战略等方面的应用案例介绍
			
AI极简经济学 主要内容是AI的各种应用案例介绍.作者把这些案例分到五个部分介绍:预测.决策.工具.战略.社会. 看书名和介绍以为会从经济学的角度解读AI,有更多的新鲜的视角和观点,读后比较失望,基本 ...
 - January 22nd, 2018 Week 04th Monday
			
It is only when you are pursued that you become swift. 唯有在被追赶的时候,你才能真正地奔跑. It is so bad a feeling wh ...