Cod sursa(job #1193083)

Utilizator breahnadavidBreahna David breahnadavid Data 30 mai 2014 21:35:38
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <iostream>
#include<fstream>



using namespace std;

ifstream f;
ofstream g;

int i,j,n,m,t[20][20],a[20],sss;


void suma()
        {

        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();
         for(int i=1;i<=n;i++)if(t[n+1][i]<0)coloana(i);
         int zxc;
         zxc=sumat();
         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();
}