Cod sursa(job #2475229)

Utilizator ViAlexVisan Alexandru ViAlex Data 16 octombrie 2019 16:16:23
Problema Jocul Flip Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<bits/stdc++.h>

using namespace std;

ifstream in("flip.in");
ofstream out("flip.out");
int m,n,mat[16][16];

bool opuslinii[16];
bool opuscoloane[16];

struct info
{
    int which;
    bool coloana;
};

info iter[40];


int sum()
{
    int result=0;
    for(int i=0; i<m; i++)
    {
        for(int k=0; k<n; k++)
        {
            int a=1,b=1;
            if(opuslinii[i])
                a=-1;
            if(opuscoloane[k])
                b=-1;
            result+=mat[i][k]*a*b;
        }
    }
    return result;

}

void read()
{
    in>>m>>n;

    for(int i=0; i<m; i++)
    {
        for(int k=0; k<n; k++)
        {
            in>>mat[i][k];
        }
    }

    for(int i=0; i<m; i++)
    {
        iter[i].coloana=false;
        iter[i].which=i;
    }
    for(int i=0; i<n; i++)
    {
        iter[i+m].coloana=true;
        iter[i+m].which=i;
    }

}

int bkt(int index)
{
    if(index==m+n)
    {
        return sum();
    }
    else
    {
        if(iter[index].coloana)
        {
            int a=bkt(index+1);
            opuscoloane[iter[index].which]=true;
            int b=bkt(index+1);
            opuscoloane[iter[index].which]=false;

            return max(a,b);
        }
        else
        {
            int a=bkt(index+1);
            opuslinii[iter[index].which]=true;
            int b=bkt(index+1);
            opuslinii[iter[index].which]=false;

            return max(a,b);
        }

    }


}

int main()
{
    read();
    out<<bkt(0);

}