Cod sursa(job #2611033)

Utilizator Robert011235Robert Dragota Marian Robert011235 Data 6 mai 2020 10:26:37
Problema Jocul Flip Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.65 kb
/*
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("nr.txt");
ofstream out("nro.txt");
int m,n;
int a[17][17];
int sub[300];
long long SUM;
long long submultimi()
{
    int k;
    long long nr=1,M=-1,m1=0,s,s1;
    int i,j;
    int nr1,poz;
    for(i=1; i<=m; i++)
        nr=nr*2;
    for(int q=0; q<nr; q++)
    {
        poz=0;
        nr1=0;
        k=q;
        while(k)
        {
            poz++;
            if(k%2==1)sub[++nr1]=poz;
            k/=2;
        }
        s1=SUM;
        for(i=1; i<=nr1; i++)
            for(j=1; j<=n; j++)
            {
                a[sub[i]][j]*=(-1);
                s1+=2*a[sub[i]][j];
            }
        for(j=1; j<=n; j++)
        {
            s=0;
            for(i=1; i<=m; i++)
                s+=a[i][j];
            if(s<=0)s1-=2*s;
        }
        if(s1>M)
            M=s1;
        for(i=1; i<=nr1; i++)
            for(j=1; j<=n; j++)a[sub[i]][j]*=(-1);
    }
    return M;
}
int main()
{
    in>>m>>n;
    for(int i=1; i<=m; i++)
        for(int j=1; j<=n; j++)
        {
            in>>a[i][j];
            SUM+=a[i][j];
        }
    out<<submultimi();
    return 0;
}
*/

#include<iostream>
#include<fstream>
using namespace std;
int a[17][17];
int sumaMaxcol(int c,int n)
{
    int i,s=0;
    for(i=1; i<=n; i++)
        s=s+a[i][c];
    return s;
}
int sumaMaxlin(int c,int m)
{
    int i,s=0;
    for(i=1; i<=m; i++)
        s=s+a[c][i];
    return s;
}
int sumaMax(int n,int m)
{
    int i,j,s=0;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            s=s+a[i][j];
    return s;
}
ifstream in("flip.in");
ofstream out("flip.out");
int main()
{
    int n,m,i,j,poz=0,neg=0,min1,min2,mini1=1,mini2=1,suma=0;
    in>>n>>m;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
        {
            in>>a[i][j];
            if(a[i][j]<0)
                neg++;
            else
                poz++;
        }
    if(poz==n*m)
        out<<sumaMax(n,m);
    if(neg==n*m)
        out<<-sumaMax(n,m);
    else
    {
        min1=sumaMaxlin(1,m);
        min2=sumaMaxcol(1,n);

        for(i=2; i<=n; i++)
            if(sumaMaxlin(i,m)<min1)
            {
                min1=sumaMaxlin(i,m);
                mini1=i;
            }
        for(i=1; i<=m; i++)
            a[mini1][i]=-a[mini1][i];


        for(i=2; i<=m; i++)
            if(sumaMaxcol(i,n)<min2)
            {
                min2=sumaMaxcol(i,n);
                mini2=i;
            }
        for(i=1; i<=n; i++)
            a[i][mini2]=-a[i][mini2];

        out<<sumaMax(n,m);
    }

    return 0;

}