Pagini recente » Cod sursa (job #1251611) | Cod sursa (job #2164608) | Cod sursa (job #3259272) | Cod sursa (job #2163788) | Cod sursa (job #1019450)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string.h>
const static int NMAX = 7294;
using namespace std;
int nr_linii , nr_coloane , matrix[NMAX][NMAX];
int R , C;
bool col_select[NMAX];
int solutie[NMAX];
int sum_linii[NMAX] , aux_sum_linii[NMAX];
int sum_matrix = 0;
int max_suma = -1;
ifstream input("elimin.in");
ofstream output("elimin.out");
void backtrack(int pos)
{
if (pos == C)
{
int sum = 0;
memset(aux_sum_linii , 0 , sizeof(int) * nr_linii);
for (int j = 0;j<pos;j++)
for (int i = 0;i<nr_linii;i++)
{
sum += matrix[i][solutie[j]];
aux_sum_linii[i] += matrix[i][solutie[j]];
}
for (int i = 0;i<nr_linii;i++)
aux_sum_linii[i] = sum_linii[i] - aux_sum_linii[i];
sort(aux_sum_linii , aux_sum_linii + nr_linii);
for (int i = 0;i<R;i++)
sum += aux_sum_linii[i];
if (sum_matrix - sum > max_suma)
max_suma = sum_matrix - sum;
}
else
{
for (int i = 0;i<nr_coloane;i++)
{
if (!col_select[i])
{
col_select[i] = true;
solutie[pos] = i;
backtrack(pos+1);
col_select[i] = false;
}
}
}
}
int main(int argc , char ** argv)
{
input >> nr_linii >> nr_coloane >> R >> C;
int sum = 0;
for (int i = 0;i<nr_linii;i++)
{
sum = 0;
for (int j = 0;j<nr_coloane;j++)
{
input >> matrix[i][j];
sum_matrix += matrix[i][j];
sum += matrix[i][j];
}
sum_linii[i] += sum;
}
memset(col_select , false , nr_coloane * sizeof(bool));
backtrack(0);
cout << max_suma;
return 0;
}