Cod sursa(job #2314756)

Utilizator dianamichesaRosu Diana Michesa dianamichesa Data 9 ianuarie 2019 00:32:21
Problema Elimin Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
int c[7500], r[7500];
int a[7500][20], sum;
int n, m, R, C, rs[7500], smax;
void citire()
{
    f >> n >> m >> R >> C;
	if(m <= n){
		for(int i = 1; i <= n; i ++)
			for(int j = 1; j <= m; j ++) {
				f >> a[i][j];
				sum += a[i][j];
			}

	}
	else {
		for(int i = 1; i <= n; i ++)
			for(int j = 1; j <= m; j ++) {
				f >> a[j][i];
				sum += a[j][i];
			}
		swap(n, m);
		swap(R, C);
	}
	for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
                c[i] += a[i][j];
}
void afisare()
{
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++)
            g<<a[i][j]<<' ';
        g<<'\n';
    }
}
void back(int l, int u){
	int i, j;
	if (l == C+1) {
		sum = 0;
		for(i = 1; i <= n; i ++) {
			r[i] = c[i];
			for(j = 1; j < l; j ++) {
				r[i] -= a[i][rs[j]];
			}
		}
		sort(r + 1, r + 1 + n);
		for(i = R + 1; i <= n; i ++)
            sum += r[i];
		smax = max(smax, sum);
	} else
	for(i = u + 1; i <= m; i++) {
	rs[l] = i;
	back(l + 1, i);
	}
}
int main()
{
    citire();
    back(1, 0);
	g << smax;
    return 0;
}