首页 > 其他 > 详细

Aizu 0525 Osenbei

时间:2015-10-18 16:53:28      阅读:304      评论:0      收藏:0      [点我收藏+]

题意:翻煎饼,只能横着翻或者竖着翻。问最多有多少朝上?

行只有10,所以枚举一下2^10的状态,每列取0或1中最大的一个。

在枚举外面把饼翻好,枚举里面指针指一下就好。(位运算或bitset乱搞

#include<bits/stdc++.h>
using namespace std;

const int maxn = 10000;
int a[20][maxn];
int *b[10];

//#define LOCAL
int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif
    int R,C;
    while(scanf("%d%d",&R,&C), R){
        for(int i = R; i--;){
            for(int j = C; j--;){
                scanf("%d",a[i]+j);
                a[i+R][j] = a[i][j]^1;
            }
        }
        int ans = 0;
        for(int S = 1<<R; --S >= 0;){
            for(int i = 0; i < R; i++){
                b[i] = a[i + (S>>i&1?R:0)];
            }
            int cur = 0; //b[0] b[1]
            for(int j = 0; j < C; j++){
                int cnt = 0;
                for(int i = 0; i < R; i++){
                    if(b[i][j]) cnt++;
                }
                cur += max(cnt,R-cnt);
            }
            ans = max(cur,ans);
        }
        printf("%d\n",ans);
    }
    return 0;
}

 

Aizu 0525 Osenbei

原文:http://www.cnblogs.com/jerryRey/p/4889639.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!