Cod sursa(job #2218639)

Utilizator ptudortudor P ptudor Data 5 iulie 2018 11:46:26
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
int n,m,r,c;
priority_queue <int> q;
int M[17][17];
int st[17];
int v[17];
int Max=-1000000;
void Check()
{
    int i,j;
    int s=0;

    for (j=1;j<=m;j++)
    {
        s=0;
        for (i=1;i<=n;i++)
        {
            if (st[i]==0)
                s+=M[i][j];
            else
                s-=M[i][j];
        }
        if (s<0)
            v[j]=1;
    }
    s=0;
/*    for (i=1;i<=n;i++)
        cout<<st[i]<<" ";
    cout<<"    ";
    for (i=1;i<=m;i++)
        cout<<v[i]<<" ";*/
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        {
            if (st[i]==1)
                M[i][j]*=-1;
            if (v[j]==1)
                M[i][j]*=-1;
            s+=M[i][j];
        }
    }
   // cout<<s<<"\n";
    if (s>Max)
        Max=s;
}

void Back(int i)
{
    if (i>n)
    {
        Check();
    }
    else
    {
         st[i]=1;
         Back(i+1);
         st[i]=0;
         Back(i+1);
    }
}
int main()
{
    ifstream in("flip.in");
    ofstream out("flip.out");
    in>>n>>m;
    int i,j;
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
            in>>M[i][j];
    }
    /*for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
            cout<<M[i][j]<<" ";
        cout<<"\n";
    }
    cout<<"\n\n";*/
    Back(1);
out<<Max<<"\n";
out.close();
in.close();
return 0;
}