首页 > 其他分享 >AOJ0525(bitset, 穷举)

AOJ0525(bitset, 穷举)

时间:2023-08-23 10:06:13浏览次数:47  
标签:include int flip define bitset 穷举 AOJ0525 row


这题有3点要注意:
1. the flip order is not related to result.
2. why we can simply count to maximum of number each column? Imagine only manipulate the row, it is easy to understand that it is unnecessary to flip them rather than count the maximum side.
3. Again, think about the scale, this problem scale of row is small relatively; so it is a good way to think based on row.
4. bitset, not familiar with it, two synatx in here: bitset; bitset.flip()

#define LOCAL

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <iostream>

#define R 10
#define C 10000

using namespace std;

int main(void){
#ifdef LOCAL
    freopen("data.in", "r", stdin);
#endif
    int r, c;

    while(scanf("%d%d", &r, &c), r || c){
        bitset<C> map[R];
        int ans = 0;

        bool x;
        for(int i = 0; i < r; i++)
        for(int j = 0; j < c; j++){
            cin >> x;
            map[i][j] = x;

            //cout << map[i][j] << endl;
        }

        for(int i = 0; i < 1 << r; i++){
            int sum = 0;

            for(int j = 0; j < r; j++){
                if(i & (1 << j))
                    map[j].flip();
            }

            for(int j = 0; j < c; j++){
                int temp = 0;
                for(int i = 0; i < r; i++){
                    if(map[i][j])
                        temp++;
                }

                sum += max(temp, r - temp);
            }
            ans = max(ans, sum);

            for(int j = 0; j < r; j++){
                if(i & (1 << j))
                    map[j].flip();
            }
        }

        cout << ans << endl;
    }

    return 0;
}


标签:include,int,flip,define,bitset,穷举,AOJ0525,row
From: https://blog.51cto.com/u_8999467/7199301

相关文章

  • POJ2718(穷举,贪心)
    参考地址一开始连题意都没搞懂就开始直接做,tooyoung。应该静下来用5分钟分析,bytheway,maybethetypicalusageofbrute-forceis“void”functioninsteadoffunctionwithreturnvalue.//#defineLOCAL#include<cstdio>#include<cstring>#include<string>#incl......
  • 第9周项目6-穷举法解决几何问题(3)
    问题及代码:/**Copyright(c)2014,烟台大学计算机学院*Allrightsreserved.*文件名称:MADE25.cpp*作者:孙化龙*完成日期:2014年10月27日*版本号:v1.0**问题描述:4人年龄为等差数列,且相加为26,乘积为880,求以他们年龄为等差数列的前20项。*输入描述:无*输出描......
  • 第9周项目6-穷举法解决几何问题(1)
    问题及代码:/**Copyright(c)2014,烟台大学计算机学院*Allrightsreserved.*文件名称:MADE23.cpp*作者:孙化龙*完成日期:2014年10月27日*版本号:v1.0**问题描述:白钱百鸡。*输入描述:*输出描述:购买方案。*/#include<iostream>usingnamespacestd;in......
  • 第9周项目6-穷举法解决几何问题(2)
    问题及代码:/**Copyright(c)2014,烟台大学计算机学院*Allrightsreserved.*文件名称:MADE24.cpp*作者:孙化龙*完成日期:2014年10月27日*版本号:v1.0**问题描述:有一元换成1分,2分,5分,有多少种兑换方法*输入描述:无*输出描述:兑换方法*/#include<iostream>......
  • 【数据结构】bitset用法
    bitset用法bitset可以说是一个多位二进制数,每八位占用一个字节,因为支持基本的位运算,所以可用于状态压缩,n位bitset执行一次位运算的时间复杂度可视为n/32.输出只能用cout1.构造:inta=5;stringb="1011";charc[4]={'1','0','1','0'};bitset<10>s1(string("1001&qu......
  • Bitset使用总结
    初始化下面是初始化例子voidsolve(){bitset<7>dp;//初始化大小为7的bitsetbitset<7>dp(5);//初始化为5的大小为7的bitset,即0000101bitset<7>dp("0011010");//用字符串直接初始化}修改voidsolve(){bitset<4>dp(5);//0101dp[0]=0;//0100}相关......
  • Bitset用法
    众所周知\(Bitset\)可以将一些\(O(n)\)的操作优化为\(O(N/w)\)相当于优化了\(>=\)一只\(log\)!!!\(bitset\)每一位占一个\(bit\),而不是一个\(Byte\)!!!若一次操作复杂度为\(O(N)\)\(bitset\)的操作复杂度为\(O(N/w)\)\(w\)为计算机字长,\(w\)位系统字长为\(w\)相比之下,空间......
  • luogu P3733 [HAOI2017] 八纵八横 题解【线段树分治+线性基+可撤销并查集+bitset】
    目录题目大意解题思路code题目大意题目链接给出一张\(n\)个点\(m\)条边的连通无向图,边带边权\(w_i\)。有以下三种操作,共\(q\)次:\(\centerdot\)在点\(x,y\)之间加入一条边权为\(w_i\)的边,如果这是第\(i\)个此种操作,则记这条新边为第\(i\)条。\(\centerdot\)将第\(k......
  • ACM-knowledge <bitset>
    关于bitset,详见参考;#include<iostream>#include<bitset>usingnamespacestd;usingLL=longlong;intmain(){bitset<10>b1;cin>>b1;//1101;可直接读入01串;cout<<b1[0]<<endl;......
  • C++ bitset
    C++bitset是C++STL库中的一个类,用于存储二进制位的数组,并提供了一些位操作的函数。下面是一些C++bitset的语法:创建一个bitset:可以使用以下语法创建一个bitset:std::bitset<size>bits;//创建一个大小为size的bitset,所有位都被设置为0std::bitset<size>bits(val);//创......