Pagini recente » Cod sursa (job #1106341) | Cod sursa (job #1465739) | Cod sursa (job #1027993) | Cod sursa (job #686671) | Cod sursa (job #2136590)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int** doBackup(int** tabla, int n, int m)
{
int** backup = (int**)calloc(n, sizeof(int*));
int i;
for(i = 0; i < n; i++){
backup[i] = (int*)calloc(m, sizeof(int));
}
int j;
for(i = 0; i < n; i++){
for(j = 0; j < m; j++){
backup[i][j] = tabla[i][j];
}
}
return backup;
}
void freeBackup(int** backup, int n)
{
int i;
for(i = 0; i < n; i++){
free(backup[i]);
}
free(backup);
}
int calculeaza(int** tabla, int n, int m)
{
int s = 0;
int i,j;
for( i = 0; i < n; i++){
for(j = 0; j < m; j++){
s += tabla[i][j];
}
}
return s;
}
void apasaButoane2(int** backup, int* digits, int n, int m)
{
int indexParcurgere = 0;
int j;
while(indexParcurgere < n + m){
if(digits[indexParcurgere] != 0){
if(indexParcurgere < n){
for(j = 0; j < m; j++){
backup[indexParcurgere][j] *= (-1);
}
}
else{
for(j = 0; j < n; j++){
backup[j][indexParcurgere - n] *= (-1);
}
}
}
indexParcurgere++;
}
}
void findMax2(int** tabla, int n, int m)
{
int index = 0;
int* digits = (int*)calloc(n + m, sizeof(int));
int nrButoane = n + m;
int** backup;
int max = calculeaza(tabla, n, m);
index = 1;
int i;
int nrCaz = pow(2, nrButoane);
while(index != nrCaz){
i = 0;
while(digits[i] == 1 && i <= (nrButoane - 1) ){
digits[i++] = 0;
}
digits[i] = 1;
backup = doBackup(tabla, n, m);
apasaButoane2(backup, digits, n, m);
int x = calculeaza(backup, n, m);
if(x > max){
max = x;
}
freeBackup(backup, n);
index++;
}
FILE* output = fopen("flip.out", "a");
fprintf(output, "%i", max);
free(digits);
fclose(output);
}
int main()
{
int n, m;
FILE* input;
input = fopen("flip.in", "r");
int i, j;
fscanf(input, "%i", &n);
fscanf(input, "%i", &m);
int** tabla;
tabla = (int**)calloc(n, sizeof(int*));
for(i = 0; i < n; i++){
tabla[i] = (int*)calloc(m, sizeof(int));
}
for(i = 0; i < n; i++){
for(j = 0; j < m; j++){
fscanf(input, "%i", &(tabla[i][j]) );
}
}
findMax2(tabla, n, m);
freeBackup(tabla, n);
fclose(input);
return 0;
}