Cod sursa(job #2637787)

Utilizator ztr535Zachman-Tisca Roxana ztr535 Data 24 iulie 2020 21:53:10
Problema Jocul Flip Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 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,int s2)
{
    int s3=0;
    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,int s1, int s2)
{
    for(int i=-1; i<=1; i+=2)
    {
        st2[p]=i;
        if(p==m)
        {
            if(st2[p]<0)
                afis(p,s1,s2+st2[p]*sc[p]);
            else
                afis(p,s1,s2);
        }
        else
        {
            if(st2[p]<0)
                bk2(p+1,s1,s2+st2[p]*sc[p]);
            else
                bk2(p+1,s1,s2);
        }
    }
}
void bk1(int k,int s1)
{
    for(int i=-1; i<=1; i+=2)
    {
        st1[k]=i;
        if(k==n)
        {
            if(st1[k]<0)
                bk2(1,s1+st1[k]*sl[k],0);
            else
                bk2(1,s1,0);
        }
        else
        {
            if(st1[k]<0)
                bk1(k+1,s1+st1[k]*sl[k]);
            else
                bk1(k+1,s1);
        }
    }
}
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,0);
    fout<<S;
    return 0;
}