Pagini recente » Diferente pentru utilizator/marcelcodrea intre reviziile 26 si 25 | Cod sursa (job #1785777) | Cod sursa (job #1016896) | Borderou de evaluare (job #363197) | Cod sursa (job #2501786)
#include <fstream>
using namespace std;
bool lin[17],col[17];
int mat[17][17];
ifstream in ("flip.in");
ofstream out ("flip.out");
int main()
{
int n,m,i,j,max1=0,c,sum;
in>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
in>>mat[i][j],max1+=mat[i][j];
for (i=1;i<=m;i++)
{
sum=0;
for (j=1;j<=n;j++)
sum+=mat[j][i];
if (sum<0)
col[i]=1;
}
sum=0;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
if (col[j]==1)
sum+=-1*mat[i][j];
else
sum+=mat[i][j];
}
max1=max(max1,sum);
for (i=1;i<(1<<n);i++)
{
for (j=1;j<=16;j++)
lin[j]=0;
for (j=1;j<=n;j++)
if (i&(1<<(j-1)))
lin[j]=1;
for (j=1;j<=16;j++)
col[j]=0;
for (c=1;c<=m;c++)
{
sum=0;
for (j=1;j<=n;j++)
{
if (lin[j]==1)
sum+=-1*mat[j][c];
else
sum+=mat[j][c];
}
if (sum<0)
col[c]=1;
}
sum=0;
for (j=1;j<=n;j++)
for (c=1;c<=m;c++)
{
if ((lin[j]+col[c])%2)
sum+=-1*mat[j][c];
else
sum+=mat[j][c];
}
max1=max(max1,sum);
}
out<<max1;
return 0;
}