Cod sursa(job #2637782)

Utilizator ztr535Zachman-Tisca Roxana ztr535 Data 24 iulie 2020 21:41:42
Problema Jocul Flip Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int n,m,a[20][20],st1[20],st2[20],sl[20],sc[20],S=0,suma_initiala=0;
void afis(int k)
{
    int s1=0,s2=0,s3=0;
    for(int i=1; i<=n; i++)
        if(st1[i]<0)
            s1+=st1[i]*sl[i];
    for(int i=1; i<=m; i++)
        if(st2[i]<0)
            s2+=st2[i]*sc[i];
    for(int i=1; i<=n; i++)
        if(st1[i]<0)
            for(int j=1; j<=m; j++)
                if(st2[j]<0)
                    s3+=a[i][j];
    if(suma_initiala+2*s1+2*s2+4*s3>S)
        S=suma_initiala+2*s1+2*s2+4*s3;
}
void bk2(int p)
{
    for(int i=-1; i<=1; i+=2)
    {
        st2[p]=i;
        if(p==m)
            afis(p);
        else
            bk2(p+1);
    }
}
void bk1(int k)
{
    for(int i=-1; i<=1; i+=2)
    {
        st1[k]=i;
        if(k==n)
            bk2(1);
        else
            bk1(k+1);
    }
}
int main()
{
    fin>>n>>m;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            fin>>a[i][j];
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            suma_initiala+=a[i][j];
            sl[i]+=a[i][j];
            sc[j]+=a[i][j];
        }
    st1[0]=0;
    st2[0]=0;
    bk1(1);
    fout<<S;
    return 0;
}