Pagini recente » Cod sursa (job #2080017) | Cod sursa (job #2192049) | Cod sursa (job #2269959) | Cod sursa (job #827036) | Cod sursa (job #2587862)
#include <iostream>
#include <fstream>
float n, m;
int A[16][16], stiva[257];
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int comutare(int x, int y) {
int c = 0, suma = 0;
while (c < m) {
suma += A[x][c] * (-1);
c++;
}
c = 1;
while (c < n) {
suma += A[c][y] * (-1);
c++;
}
return suma;
}
int valid(int k, int x, int y) {
int suma = comutare(x, y);
if (suma > stiva[k]) {
stiva[k + 1] = suma;
return 1;
} else
return 0;
}
int solutie(int k) {
return k == n * m;
}
int tipar(int k) {
int suma = stiva[k];
return suma;
}
void backtr(int k) {
stiva[1] = 0;
for(int i = 0; i < n; i++)
for (int j = 0; j < m; j++) {
if (valid(k, i, j)) { // daca noua suma calculata pe comutatorul k este mai mare fata de suma maxima din stiva
if (solutie(k)) // daca sa ajuns la cea mai mare suma
fout << stiva[k]; //tipareste suma
else
backtr(k + 1);
} else
backtr(k + 1);
}
}
int main()
{
fin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
fin >> A[i][j];
backtr(1);
return 0;
}