Cod sursa(job #1015809)

Utilizator IoannaPandele Ioana Ioanna Data 25 octombrie 2013 10:55:37
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <bitset>
#define NMAX 700

using namespace std;

int n, m, r, c;
int a[NMAX][NMAX];
int v[NMAX];
int maxim = 0;
char elim[7295];
int sum;

bool swapb = false;
int dim, celalalt, dim_v, dim_e;

void read() {
	ifstream in ("elimin.in");
	in>>n>>m>>r>>c;
	if (n < m) {
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++) {
                in >> a[i][j];
            }
	} else {
	    for (int i = 0; i < n; i++)
          for (int j = 0; j < m; j++)
            in >> a[j][i];
	}
	swap(n,m);
	swap(r,c);
}

void solutie() {
    sum = 0;
    for (int i = 0; i < n; i++) {
       v[i] = 0;
	   for (int j = 0; j < m; j++) {
          if (elim[j]) continue;
            sum += a[i][j];
            v[i] += a[i][j];

        }
    }
	sort(v, v + m);
	int suma = sum;
	for (int j = 0; j < c; j++)
		suma -= v[j];
	if (suma > maxim) maxim = suma;

}


void backtracking(int k, int last) {
	if (k > r) {
		solutie();
		return;
	}

	for (int i = last + 1; i < n - (r - k); i++) {
        elim[i] = 1;
        backtracking(k + 1, i);
        elim[i] = 0;
  }
}

int main() {
	read();
	backtracking(1, -1);
	ofstream out("elimin.out");
	out<<maxim<<"\n";
	return 0;
}