zoukankan      html  css  js  c++  java
  • UVA 11464 Even Parity

    #include <map>
    #include <set>
    #include <list>
    #include <cmath>
    #include <ctime>
    #include <deque>
    #include <stack>
    #include <queue>
    #include <cctype>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <climits>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define LL long long
    #define PI 3.1415926535897932626
    using namespace std;
    int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
    #define MAXN 20
    const int INF = 0x3f3f3f3f ;
    int sta;
    int res[MAXN][MAXN];
    int ty[MAXN][MAXN];
    int N;
    int getans(int sta,int cnt)
    {
            int ans = cnt;
            //printf("ans = %d
    ",ans);
            for (int i = 1; i < N; i++)
                    for (int j = 0 ; j < N; j++)
            {
                    int sum = 0;
                    if (i > 1) sum += ty[i - 2][j];
                    if (j > 0) sum += ty[i - 1][j - 1];
                    if (j < N - 1) sum +=ty[i - 1][j + 1];
                    ty[i][j] = sum % 2;
                    if (ty[i][j] == 0 && res[i][j] == 1) return INF;
            }
            for (int i = 1; i < N; i++)
                    for (int j = 0 ; j < N; j++)
                    if (ty[i][j] != res[i][j]) ans++;
           // printf("ans =%d
    
    ",ans);
            return ans;
    }
    int main()
    {
           // freopen("sample.txt","r",stdin);
            int kase = 1 , T;
            scanf("%d",&T);
            while (T--)
            {
                    scanf("%d",&N);
                    for (int i = 0; i < N; i++)
                            for (int j = 0 ; j < N; j++) scanf("%d",&res[i][j]);
                    int ans = INF;
                    for (int s = 0 ; s < 1<<N; s++)
                    {
                            bool flag = false;
                            int tmp = 0;
                            memset(ty,0,sizeof(ty));
                            for (int i = 0 ; i < N; i++)
                            {
                                    if(((s & (1 << i)) == 0) && res[0][N - 1 - i])
                                    {
                                            flag = true;
                                            break;
                                    }
                                    if ((s & (1 << i)) && res[0][N - 1 - i] == 0)
                                    {
                                            tmp++;
                                            ty[0][N- 1 - i] = 1;
                                    }
                                    if ((s & (1 << i)) && res[0][N - 1 - i])
                                            ty[0][N - 1 -i] = 1;
                            }
                            if  (flag) continue;
                            //printf("%d
    ",s);
                            //for (int i = 0; i < N ; i++) printf("%d ",ty[0][i]);
                            tmp = getans(s,tmp);
                            ans = min(ans,tmp);
                    }
                    if (ans == INF) ans = -1;
                    printf("Case %d: %d
    ",kase++,ans);
            }
            return 0;
    }
  • 相关阅读:
    我最讨厌画图,这辈子我都不想再画图
    bzoj1218[HNOI2003]激光炸弹
    bzoj1196[HNOI2006]公路修建问题
    bzoj1588[HNOI2002]营业额统计
    bzoj2039[2009国家集训队]employ人员雇佣
    bzoj3874[Ahoi2014]宅男计划
    bzoj2282[Sdoi2011]消防
    bzoj1798[Ahoi2009]Seq 维护序列seq
    bzoj4003[JLOI2015]城池攻占
    bzoj2809[Apio2012]dispatching
  • 原文地址:https://www.cnblogs.com/Commence/p/4068925.html
Copyright © 2011-2022 走看看