Cod sursa(job #1267564)
| Utilizator | Data | 20 noiembrie 2014 00:22:10 | |
|---|---|---|---|
| Problema | Jocul Flip | Scor | 70 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 3.25 kb |
#include <stdio.h>
FILE *fin, *fout;
int m, n, sum, max, sum1;
unsigned long int c, temp, pwr[16];
bool *v, f;
int main()
{
fin = fopen("flip.in", "r");
fout = fopen("flip.out", "w");
pwr[0] = 1;
for(int i =1; i< 16; i++) pwr[i] = pwr[i-1]*2;
fscanf(fin, "%d%d", &m, &n);
v = new bool[m];
long long int arr1[m][n], arr2[m][n];
for(int i= 0; i< m; i++)
{
for(int j =0; j< n; j++)
{
fscanf(fin, "%d", &arr1[i][j]);
}
}
max = -999999999;
for(c = 0;c<pwr[m]; c++)
{
for(int i = 0; i< m; i++) v[i] = 0;
for(int i = 0; i< m; i++)
for(int j= 0; j< n; j++)
arr2[i][j] = arr1[i][j];
temp = c;sum = 0;
for(int i =0; temp; i++)
{
v[m-i] = temp%2;
temp = temp/2;
}
for(int i = 0; i< m; i++)
{
if(!v[i]) continue;
for(int j= 0; j< n; j++)
{
arr2[i][j]*=-1;
}
}
for(int i = 0; i< n; i++)
{
sum1 = 0;
for(int j =0; j< m; j++) sum1+=arr2[j][i];
if(sum1 < 0) sum-=sum1;
else sum+=sum1;
}
if(!f)
{
f = 1;
max = sum;
continue;
}
if(sum > max) max = sum;
}
v = new bool[n];
for(c = 0;c<pwr[n]; c++)
{
for(int i = 0; i< n; i++) v[i] = 0;
for(int i = 0; i< m; i++)
for(int j= 0; j< n; j++)
arr2[i][j] = arr1[i][j];
temp = c;sum = 0;
for(int i =0; temp; i++)
{
v[n-i] = temp%2;
temp = temp/2;
}
for(int i = 0; i< n; i++)
{
if(!v[i]) continue;
for(int j= 0; j< m; j++)
{
arr2[j][i]*=-1;
}
}
for(int i = 0; i< m; i++)
{
sum1 = 0;
for(int j =0; j< n; j++) sum1+=arr2[i][j];
if(sum1 < 0) sum-=sum1;
else sum+=sum1;
}
if(sum > max) max = sum;
}
fprintf(fout, "%d", max);
fclose(fin);
fclose(fout);
return 0;
}
