Cod sursa(job #2529818)

Utilizator mihai_22Mihai M mihai_22 Data 24 ianuarie 2020 00:27:26
Problema Jocul Flip Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <iostream>
#include<fstream>
using namespace std;


int x4[15], n4;
int i,j, N,M, a[17][17];
long suma2, summax , sump, sumn;

ifstream f("flip.in");
ofstream g ("flip.out");

void citire()
{
    f>>M>>N;
    for(i=0; i<M; i++)
        for(j=0; j<N; j++)
            f>>a[i][j];
}

void minus1( int k)
{
    for(j=0; j<=N; j++)
        a[k][j]*=-1;
}

void copiere()
{

    for(i=0; i<M; i++)
     if(x4[i]==1)
     {
         minus1(i);
         x4[i]=0;
     }
}


void BackRec4(int k)
{
    int p;
    for(p=0; p<=1; p++)
    {
        x4[k]=p;
        if (k==M)
        {
            suma2=0;
            copiere();              /// resetare matrice initiala

            for(int i2=0; i2<M; i2++) /// inmultire linii cu -1
                if(x4[i2]==1)
                    minus1( i2);

            for(int w=0; w<N; w++)       /// calculare modul suma  elemente pozitive si modul de suma elemente negative, pe fiecare coloana

            {
                sumn=sump=0;             /// initializare suma el poz/neg cu 0
                for(j=0; j<M; j++)
                    if(a[j][w]>=0)
                        sump+=a[j][w];
                    else
                        sumn-=a[j][w];

                        if(sump-sumn>0)       /// calcularea sumei elementelor matricei
                            suma2+=sump-sumn;
                        else
                            suma2-=sump-sumn;
            }
            if(suma2>summax)                /// actualizare suma maxima
                summax=suma2;
        }
        else BackRec4(k+1);
    }
}

int main()
{
    citire();

   for(i=0;i<M;i++)           /// initializare suma maxima
    for(j=0;j<N;j++)
    summax+=a[i][j];


    BackRec4(0);
    g<<summax;

    return 0;
}