Start: Jul, 03, 2019 08:38:00
2019年度暑期短学期第七天 助教场
End: Jul, 04, 2019 23:00:00
Time elapsed:
Time remaining:

Problem_ID: B
Result: Accepted
Time: 483ms
Memory: 1896kB
Author: 2017212212208
In contest: 1292

#include<iostream>
#include<cstring>
#include<vector>
#include<deque>
#include<algorithm>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;


int T,n;
char mmp[105][105];
int a[105][105],rea[105][105];
int can[105],recan[105][105];
int ans;

void DFS(int nl,int ty)
{
//    printf("Lie:%d\n",nl);
//    for(int i=1;i<=n;i++)
//    {
//        if(can[i])printf("1\n");
//        else printf("0\n");
//    }

    if(nl>=n+1)
    {
        int ret=0;
        for(int i=1;i<=n;i++)if(can[i])ret++;
        ans=max(ret,ans);
        return ;
    }

    bool tag=false;
    int cnt=0;
    for(int i=1;i<=n;i++)
    {
        if( (a[i][nl]^ty)==1&&can[i] )cnt++;
    }
//    printf("cnt:%d\n",cnt);
//    printf("--------\n");
    if(cnt>ans)
    {
        for(int i=0;i<=1;i++)
        {
            for(int j=1;j<=n;j++)recan[nl][j]=can[j];

            for(int j=1;j<=n;j++)
            {
                if( (a[j][nl]^ty)==1&&can[j] )can[j]=1;
                else can[j]=0;
            }
            DFS(nl+1,i);

            for(int j=1;j<=n;j++)can[j]=recan[nl][j];

        }
    }
    return ;




}

int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        ans=0;
        for(int i=1;i<=n;i++)
        {
            can[i]=0;
            scanf("%s",mmp[i]+1);
            bool tag=true;
            for(int j=1;j<=n;j++)
            {
                a[i][j]=mmp[i][j]-'0';
                if(!a[i][j])
                {
                    tag=false;
                }
            }
            if(tag)
            {
                ans++;
            }
        }
        //printf("**%d\n",ans);
        for(int i=0;i<=1;i++)
        {
            for(int j=1;j<=n;j++)can[j]=1;
            DFS(1,i);
        }
        printf("%d\n",ans);

    }
}