Cod sursa(job #1987102)

Utilizator DavidLDavid Lauran DavidL Data 29 mai 2017 19:36:19
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#define MAX 20
using namespace std;
ifstream fi("flip.in");
ofstream fo("flip.out");

int n,m,a[MAX][MAX],p[2*MAX],sum_max,a2[MAX][MAX];

int sum()
{
    int rez=0;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=m; j++)
            rez+=a2[i][j];
    return rez;
}

void bkt(int poz)
{
    if (poz>1)
    {
        for (int i=1; i<=n; i++)
            for (int j=1; j<=m; j++)
                a2[i][j]=a[i][j];
        for (int i=1; i<poz; i++)
        {
            if (p[i]<=n)
            {
                ///modificam linia p[i]
                for (int j=1; j<=m; j++)
                    a2[p[i]][j]*=-1;
                int sum_curent=sum();
                sum_max=max(sum_max,sum_curent);
            }
            else
            {
                ///modificam coloana p[i]-n
                for (int j=1; j<=n; j++)
                    a2[j][p[i]-n]*=-1;
                int sum_curent=sum();
                sum_max=max(sum_max,sum_curent);
            }
        }
    }
    for (int i=p[poz-1]+1; i<=m+n; i++)
    {
        p[poz]=i;
        bkt(poz+1);
    }
}

int main()
{
    fi>>n>>m;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=m; j++)
            fi>>a[i][j];
    bkt(1);
    fo<<sum_max;
    fi.close();
    fo.close();
    return 0;
}