Cod sursa(job #2514820)

Utilizator TheShieldTheShield TheShield Data 26 decembrie 2019 21:18:26
Problema Jocul Flip Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("flip.in");
ofstream fout("flip.out");

short n, m, a[17][17], ca[17][17], v[33], k;
long long s, smax;

void comuta()
{
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            ca[i][j]=a[i][j];

    for(int l=0;l<k;l++)
        if(l<n && v[l])
            for(int j=0;j<m;j++)
                ca[l][j]=-ca[l][j];
        else if(l>=n && l<k && v[l])
            for(int i=0;i<n;i++)
                ca[i][l-n]=-ca[i][l-n];
}

long long suma()
{
    s=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            s+=ca[i][j];
    return s;
}

void dec2bin(int x)
{
    int ck=k-1;

    for(int i=0;i<k;i++)
        v[i]=0;

    while(x>0)
    {
        v[ck]=x%2;
        x/=2;
        ck--;
    }
}

int main()
{
    fin>>n>>m;
    k=n+m;

    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        {
            fin>>a[i][j];
            ca[i][j]=a[i][j];
        }

    for(long long i=0;i<pow(2,k);i+=2)
    {
        dec2bin(i);
        comuta();
        if(suma()>smax)
            smax=suma();
    }

    fout<<smax;
    return 0;
}