Cod sursa(job #1294524)

Utilizator DragosCDragos Corleanca DragosC Data 17 decembrie 2014 18:45:04
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstring>
using namespace std;
char v[17];
int sc[17];
int flip(int n,int m, int a[17][17],int mod[17][17])
{
    int k=1,i,t=0,j,s=0,smax=0;

    while(k<=ceil(pow(2,n)))
    {
        s=0;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                mod[i][j]=a[i][j];
            }
        }
        t=0;
        if(v[n]=='1')
        {
            t=1;
            v[n]='0';
        }
        else
        {
            v[n]='1';

        }
        for(i=n-1;i>=1&&t==1;i--)
        {
            if(v[i]=='1')
            {
                v[i]='0';
            }
            else
            {
                v[i]='1';
                t=0;

            }
        }
        for(i=1;i<=n;i++)
        {
            if(v[i]=='1')
            {
                for(j=1;j<=m;j++)
                {
                    mod[i][j]*=-1;
                    sc[j]+=mod[i][j];
                }
            }
            else
            {
                for(j=1;j<=m;j++)
                {
                    sc[j]+=mod[i][j];
                }
            }
        }
        for(j=1;j<=m;j++)
        {
            if(sc[j]<0)
            {
                s-=sc[j];
            }
            else
            {
                s+=sc[j];
            }
        }
        if(s>smax)
        {
            smax=s;
        }
        k++;
        memset(sc,0,sizeof(sc));
    }
return smax;
}
int main()
{
    int n,m,x,s;
    ifstream f("flip.in");
    ofstream g("flip.out");
    f>>n>>m;
    int a[17][17],mod[17][17];
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            f>>x;
            a[i][j]=x;
        }
    }
    g<<flip(n,m,a,mod);

    return 0;
}