Cod sursa(job #2727247)

Utilizator PopescuMihneaPopescu Mihnea-Valentin PopescuMihnea Data 21 martie 2021 17:49:05
Problema Jocul Flip Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include<fstream>
#include <math.h>
using namespace std;
ifstream f ("flip.in");
ofstream g ("flip.out");
int N,M,i,j,k,xs[16],mat[16][16],sc[16],smax;

void prel_sol()
{
    int i,j,s=0;
    for (i=0; i<N; i++)
    {
        for (j=0; j<M; j++)
            if (xs[j])
                s+=mat[i][j]*-1;
            else
                s+=mat[i][j];
    }
    if (s>smax)
    {
        smax=s;
        for (i=0; i<M; i++)
            sc[i]=xs[i];
    }
}
void prel_sol2()
{
    int i,j,s=0;
    for (i=0; i<N; i++)
    {
        for (j=0; j<M; j++)
            if (xs[i])
                s+=mat[i][j]*-1;
            else
                s+=mat[i][j];
    }
    if (s>smax)
        smax=s;
}

void back(int k)
{
    if (k==M)
        prel_sol();
    else
        for (int i=0; i<2; i++)
        {
            xs[k]=i;
            back(k+1);
        }
}
void back2(int k)
{
    if (k==N)
        prel_sol2();
    else
        for (int i=0; i<2; i++)
        {
            xs[k]=i;
            back2(k+1);
        }
}
int main()
{

    f>>N>>M;
    for (i=0; i<N; i++)
        for (j=0; j<M; j++)
            f>>mat[i][j];
    back(0);
    for (j=0; j<M; j++)
        if (sc[j])
            for (i=0; i<N; i++)
                mat[i][j]*=-1;
    back2(0);
    g<<smax;
}