Cod sursa(job #1728344)

Utilizator MihalachiRazvanMihalachi Razvan MihalachiRazvan Data 12 iulie 2016 19:24:44
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
#define dim 1000000
int n,m,a[17][17],s,i,j,k,poz,minii,minic,maxi=0;

int suma()
{
    int s=0;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        s=s+a[i][j];
        return s;
}
int colmini()
{
    minii=dim;
    for(int j=1;j<=m;j++)
        {
            int s=0;
            for(int i=1;i<=n;i++)
                s=s+a[i][j];
            if(minii>=s)
            {minii=s;
             poz=j;}}
   return poz;
}
int linmini()
{
    minic=dim;
    for(int i=1;i<=n;i++)
        {
            int s=0;
            for(int j=1;j<=m;j++)
                s=s+a[i][j];
            if(minic>=s)
            {minic=s;
             poz=i;}}
   return poz;
}
int sol(int k)
{
    linmini();
    colmini();
    if(minii>0&&minic>0)
        return 1;
    return 0;
}

void BK(int k)
{
    if(sol(k)!=1)
     if(k!=n*m)
    {int l,c;
    if(maxi<=suma())
    maxi=suma();
    c=colmini();
      for(i=1;i<=n;i++)
          a[i][c]=a[i][c]*(-1);
           l=linmini();
           if(maxi<=suma())
            maxi=suma();
      for(j=1;j<=m;j++)
            a[l][j]=a[l][j]*(-1);
             if(maxi<=suma())
            maxi=suma();
        BK(k+1);
    }
}
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
          f>>a[i][j];
         BK(1);
         g<<maxi;

            f.close();
            g.close();

    return 0;
}