Pagini recente » Cod sursa (job #1457657) | Cod sursa (job #438911) | Cod sursa (job #2178860) | Cod sursa (job #2448290) | Cod sursa (job #1025473)
/*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>
#include <stdlib.h>
int suma_matrice(int v[100][100], int x, int y)
{
int i,j,s=0;
for (i=0 ; i<x ; i++)
for (j=0 ; j<y ; j++)
s += v[i][j];
return s;
}
FILE *fin, *fout;
int main()
{
int m,n,i,j,suma,temp,contor;
int a[100][100];
fin = fopen("flip.in","r");
fout = fopen("flip.out","w");
fscanf(fin,"%d %d\n", &m , &n);
//Citire matrice din fisier
for (i=0 ; i<m ; i++)
{
for (j=0 ; j<n ; j++)
{
fscanf(fin,"%d ", &a[i][j]);
}
fscanf(fin,"\n");
}
suma = suma_matrice(a,m,n);
do
{
contor = 0;
//Parcurgere pe linii
for (i=0 ; i<m ; i++)
{
for (j=0 ; j<n ; j++)
{
a[i][j] *= (-1);
}
temp = suma_matrice(a,m,n);
if (temp <= suma)
for (j=0 ; j<n ; j++)
{
a[i][j] *= (-1);
}
else
{
suma = temp;
contor = 1;
}
}
//Parcurgere pe coloane
for (j=0 ; j<n ; j++)
{
for (i=0 ; i<m ; i++)
{
a[i][j] *= (-1);
}
temp = suma_matrice(a,m,n);
if (temp <= suma)
for (i=0 ; i<m ; i++)
{
a[i][j] *= (-1);
}
else
{
suma = temp;
contor = 1;
}
}
}
while (contor != 0);
suma = suma_matrice(a,m,n);
fprintf(fout,"%d",suma);
fclose(fin);
fclose(fout);
return 0;
}