Cod sursa(job #1193126)

Utilizator breahnadavidBreahna David breahnadavid Data 30 mai 2014 23:39:51
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <iostream>
#include<fstream>
 
 
 
using namespace std;
 
ifstream f;
ofstream g;
 
int i,j,n,m,t[20][20],a[20];

long long sss; 
 
void suma()
        {
        int i,j;
        for(i=1;i<=n;i++){t[i][m+1]=0;
        for(j=1;j<=m;j++)t[i][m+1]+=t[i][j];}
 
        for(i=1;i<=n;i++){t[n+1][i]=0;
        for(j=1;j<=m;j++)t[n+1][i]+=t[j][i];}
        }
 
int sumat()
        {
 
        int qw=0;
        for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)qw+=t[i][j];
        return qw;
        }
 
void linie(int mn)
        {
        for(int i=1;i<=m;i++)t[mn][i]*=-1;
         }
void coloana(int mn)
        {
        for(int i=1;i<=n;i++)t[i][mn]*=-1;
        }

void afis(int k,int t[20][20])
        {
         for(int i=1;i<=k;i++)linie(a[i]);
         suma();
         int zxc;
         zxc=sumat();
         for(int i=1;i<=m;i++)
                if(zxc<zxc-2*t[n+1][i]){coloana(i);zxc=sumat();suma();}
                
         if(zxc>sss)sss=zxc;
        }
void back(int k)
        {
        if(k<=n){
        afis(k,t);
        for(int i=a[k];i<=n;i++)
                {
                int ok=1;
                int j=1;
                while(j<=k&&ok){if(i==a[j])ok=0;j++;}
 
                if(ok){
                        a[k+1]=i;
                        back(k+1);
                        }
                }
        }}
 
long long k;
 
 
int main()
{
 
f.open("flip.in");
g.open("flip.out");
 
f>>n>>m;
 
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)f>>t[i][j];
 
sss=sumat();
a[0]=1;
back(0);
 
g<<sss;
g.close();
}