Pagini recente » Cod sursa (job #1593773) | Cod sursa (job #3282551) | Cod sursa (job #506865) | Cod sursa (job #2892921) | Cod sursa (job #320744)
Cod sursa(job #320744)
/*
Jocul Flip
Gigel a descoperit un nou joc pe care l-a numit "Flip". Acesta se joaca pe o tabla dreptunghiulara de dimensiuni N*M care contine numere intregi. Fiecare linie si fiecare coloana are un comutator care schimba starea tuturor elementelor de pe acea linie sau coloana, inmultindu-le cu -1. Scopul jocului este ca pentru o configuratie data a tablei de joc sa se actioneze asupra liniilor si coloanelor astfel incat sa se obtina o tabla cu suma elementelor cat mai mare.
Cerinta
Dandu-se o configuratie pentru tabla "Flip", realizati un program care sa determine suma maxima pe care Gigel o poate obtine.
Date de Intrare
Prima linie a fisierului flip.in contine doua numere intregi N si M, separate prin cate un spatiu, care reprezinta dimensiunea tablei. Urmatoarele N linii contin cate M numere intregi seperate prin cate un spatiu care descriu configuratia tablei de joc.
Date de Iesire
Prima linie a fisierului flip.out contine un numar care va reprezenta suma maxima pe care Gigel o poate obtine comutand liniile si coloanele tablei de joc.
Restrictii si precizari
* 1 ≤ N, M ≤ 16
* Tabla de joc contine numere intregi din intervalul [-1.000.000,1.000.000]
*/
#include <stdio.h>
int main(void) {
FILE *in, *out;
unsigned int m,n,i,j,sum;
int F[16][16], sn, sp;
in = fopen("flip.in", "r"); out = fopen("flip.out", "w");
fscanf(in, "%u %u", &m, &n);
printf("\n");
for(i=0; i<m; i++) {
for(j=0; j<n; j++) {
fscanf(in, "%i", &F[i][j]);
printf("%4i", F[i][j]);
}
printf("\n");
}
for(i=0; i<m; i++) {
sn=0; sp=0;
for(j=0; j<n; j++)
if (F[i][j] > 0)
sp = sp + F[i][j];
else
sn = sn + F[i][j];
if ( abs(sn) > sp )
for(j=0; j<n; j++)
F[i][j] = -F[i][j];
}
for(j=0; j<n; j++) {
sn=0; sp=0;
for(i=0; i<m; i++)
if (F[i][j] > 0)
sp = sp + F[i][j];
else
sn = sn + F[i][j];
if ( abs(sn) > sp )
for(i=0; i<m; i++)
F[i][j] = -F[i][j];
}
sum = 0;
for(i=0; i<m; i++)
for(j=0; j<n; j++)
sum += F[i][j];
printf("\n sum: %i", sum);
fprintf(out,"%i", sum);
fclose(in); fclose(out);
return 0;
}