Pagini recente » Cod sursa (job #564140) | Cod sursa (job #1160835) | Cod sursa (job #1592504) | Cod sursa (job #1522529) | Cod sursa (job #2334746)
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
int N, M, sumMax, currentSum;
int table[16][16];
unsigned int power(unsigned int base, unsigned int exp)
{
register unsigned int result = 1;
for (;;)
{
if (exp & 1)
result *= base;
exp >>= 1;
if (!exp)
break;
base *= base;
}
return result;
}
int computeSum(unsigned int rowsFlip, unsigned int colsFlip)
{
register int i, j, tableSum = 0, sum, minusOn;
char sign[16];
for (j = 0; j < M; j++)
{
if ((colsFlip >> j) & 0x0001)
{
sign[j] = -1;
}
else
{
sign[j] = 1;
}
}
//printf("rowsflip=%x, colsFlip=%x\n", rowsFlip, colsFlip);
for (i = 0; i < N; i++)
{
sum = 0;
for (j = 0; j < M; j++)
{
//minusOn = (colsFlip >> j) & 0x01;//(((rowsFlip >> i) & 0x01); + ((colsFlip >> j) & 0x01)) % 2;
sum += table[i][j] * sign[j];
}
tableSum += abs(sum);
}
return tableSum;
}
void printMatrix(void)
{
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
printf("%d ", table[i][j]);
}
printf("\n");
}
printf("printing finished\n");
}
void readInput(void)
{
register int i, j;
FILE * fp;
fp = fopen("flip.in", "r");
if (!fscanf(fp, "%d", &N))
{
fclose(fp);
return;
}
if (!fscanf(fp, "%d", &M))
{
fclose(fp);
return;
}
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
if (!fscanf(fp, "%d", &table[i][j]))
{
fclose(fp);
return;
}
}
}
fclose(fp);
}
void iterateThroughSolutions(void)
{
register unsigned int i, j;
i = 0;
//for (i = 0; i < power(2, N-1); i++)
{
for (j = 0; j < power(2, M); j++)
{
currentSum = computeSum(i,j);
(currentSum > sumMax ? sumMax = currentSum: 1);
/*if (currentSum > sumMax)
{
sumMax = currentSum;
}*/
}
}
}
void printOutput(void)
{
FILE * fp;
fp = fopen("flip.out", "w");
fprintf(fp, "%d", sumMax);
fclose(fp);
}
int main(void)
{
sumMax = INT_MIN;
currentSum = INT_MIN;
readInput();
iterateThroughSolutions();
printOutput();
return 0;
}