Cod sursa(job #2195630)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 16 aprilie 2018 21:29:33
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <fstream>
#define nmax 17

using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int N,M,matrice[nmax][nmax], suma,suminit,init[nmax][nmax];
struct date
{
    int l,c;
};
date c[nmax];
void restabileste(int linie, int coloana)
{
    for(int i =1 ; i <=M; i++)
        matrice[linie][i]*=-1;
    for(int j =1 ; j <= N; j ++)
        matrice[j][coloana]*=-1;
}
int valid(int linie, int coloana)
{
    int sum=0;
    for(int i =1 ; i <=M; i++)
        matrice[linie][i]*=-1;
    for(int j =1 ; j <= N; j ++)
        matrice[j][coloana]*=-1;
    for(int i = 1; i <= N; i ++)
        for(int j =1 ; j <= M; j++)
            sum+=matrice[i][j];

    if(sum>suminit)
    {
        suminit=sum;
        return 1;
    }
    else
    {
        restabileste(linie,coloana);
        return 0;
    }
}
int answer(int l, int col, int k)
{

    for(int i = l + 1 ; i <= N; i ++)
        for(int  j =1 ; j <= M; j++)
        {
            c[k].l=i;
            c[k].c=j;
            if(valid(c[k].l,c[k].c))
            {
                answer(c[k].l,c[k].c,k+1);
            }
        }
}
int main()
{

    fin>>N>>M;;
    for(int i = 1 ; i <= N; i ++)
    {
        for(int j =1 ; j <= M ; j ++)
        {
            fin>>matrice[i][j];
            init[i][j]=matrice[i][j];
            suminit+=matrice[i][j];
        }
    }
    answer(0,0,0);
    fout<<suminit;

    return 0;
}