命运之手

Problem A. 命运之手(fate.c/cpp/pas)

发牌者的憎恶

 

Input file

fate.in

Output file

fate.out

Time limit

1 sec

Memory limit

128 mb

Liang同学最近被日天同学带的迷上了玩命运之手,然后天天和BUFF同学说什么什么命运之手什么什么的,穷的没钱买的BUFF同学烦了,于是给他加了个BUFF,“发牌者的憎恶”,于是在Liang同学今天晚上的命运之手游戏中,发牌者就给Liang同学出了个难题,N(N<=100000)行牌,一共有8列,一开始牌有正面朝上和反面朝上的,发牌人会下给Liang同学和正面牌数相同的诅咒,当然Liang知道诅咒的恶心,于是就想让牌尽量少的朝上,Liang同学每次可以翻一行或一列的牌,可以翻无数次,请告诉Liang同学,他最少被诅咒多少次,即Liang同学翻过后牌尽量少的朝上数。

Input

数据第一行为整数 n不超过 100000;第二~n+1行为 n*8的0,1矩阵,0为反面朝上的牌,1为正面朝上的牌。(最好搞个读入优化)

 

Output

对于每组数据,输出请告诉Liang同学,他最少被诅咒多少次

 

Examples

 

fate.in

fate.out

2

1 1 1 1 1 1 1 1

0 0 0 0 0 0 0 0

 

0

 

Hint

对于 50%的数据,0<= n <= 1000

对于 80%的数据,0<= n <= 50000

对于 100%的数据,0 <= n <= 100000

 

枚举+贪心

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 const int maxn=100005;
 8 int A[maxn][9];
 9 bool vis[9];
10 int N,ans=1e8;
11 
12 void dfs(int i)
13 {
14     if(i>8)
15     {
16         for(int j=1;j<=8;++j)
17             if(vis[j])
18             {
19                 for(int k=1;k<=N;++k)
20                     A[k][j]=1-A[k][j];
21             }
22         int sum=0;
23         for(int j=1;j<=N;++j)
24         {
25             int cnt=0;
26             for(int k=1;k<=8;++k)
27                 cnt+=A[j][k];
28             if(cnt>4) sum+=8-cnt;
29             else sum+=cnt;
30         }
31     //    cout<<sum<<endl;
32         ans=min(ans,sum);
33         for(int j=1;j<=8;++j)
34             if(vis[j])
35             {
36                 for(int k=1;k<=N;++k)
37                     A[k][j]=1-A[k][j];
38             }
39         return;
40     }
41     dfs(i+1);
42     vis[i]=true;
43     dfs(i+1);
44     vis[i]=false;
45 }
46     
47 int main()
48 {
49     #ifndef ONLINE_JUDGE
50         freopen("fate.in","r",stdin);
51         freopen("fate.out","w",stdout);
52     #endif
53     scanf("%d\n",&N);
54     memset(vis,false,sizeof(vis));
55     for(int i=1;i<=N;i++)
56     {
57         for(int j=1;j<=8;++j)
58         {
59             A[i][j]=getchar()-'0';
60             getchar();
61         }
62     }
63     dfs(1);
64     cout<<ans;
65     return 0;
66 }
80分

 

posted @ 2016-11-13 22:11  cnblogsLSY  阅读(83)  评论(0)    收藏  举报