Cod sursa(job #1828205)

Utilizator TherevengerkingSurani Adrian Therevengerking Data 12 decembrie 2016 22:07:18
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int n,m,c=0;
int a[18][18];
int col[18];
int s=-999999999;
int sum=0;
int linie(int col[18],int sum1[18],int sum2[18])
{
    int sumlinie[18];
    for(int i=1;i<=n;i++)
        sumlinie[i]=sum1[i];
    for(int j=1;j<=c;++j)
    {
        sum2[col[j]]=sum2[col[j]]*(-1);
        for(int i=1;i<=n;i++)
            sumlinie[i]+=2*(a[i][col[j]]*(-1));
    }
    for(int i=1;i<=n;++i)
    {
        if(sumlinie[i]<0)sumlinie[i]=sumlinie[i]*(-1);
        sum+=sumlinie[i];
    }
    return sum;
}
int main()
{
    int sum_col[18];
    int sum_lin[18];
    fin>>n>>m;
    for(int i=1;i<=n;i++)sum_lin[i]=0;
    for(int j=1;j<=m;j++)sum_col[j]=0;
    int valmax=1<<m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            fin>>a[i][j];
            sum_col[j]+=a[i][j];
            sum_lin[i]+=a[i][j];
        }
    for(int r=1;r<valmax;++r)
    {
        for(int t=1;t<=m;t++)
            if(r&(1<<(t-1)))
            {
                c++;
                col[c]=t;
            }
        sum=linie(col,sum_lin,sum_col);
        if(sum>s)s=sum;
        c=0;sum=0;
    }
    fout<<s;
    return 0;
}