Cod sursa(job #3305482)

Utilizator TimofeiFilipTimofei Filip Emanuel TimofeiFilip Data 1 august 2025 20:35:06
Problema Elimin Scor 40
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.7 kb
#include <algorithm>
#include <cstdio>
#include<climits>
using namespace std;
const int NMAX = 500;

int a[NMAX][NMAX], lin_sume[NMAX], col_sume[NMAX];
int n, m, r, c,maxc=INT_MAX;
int sol[NMAX];
int linie_sterse[NMAX];
bool valid(int i)
{
    if (i==0)
        return true;

    if (sol[i - 1] < sol[i])
        return true;

    return false;
}
void combinari(int position) {
    if (position == r) {
        int sum = 0;
        for (int i = 0; i < r; i++) {
            //printf("%d ", lin_sume[sol[i]]);
            sum += lin_sume[sol[i]];
        }
        //printf("= %d\n", sum);

        if (sum < maxc) {
            maxc = sum;
            for (int i = 0; i < r; i++) {
                linie_sterse[i] = sol[i];
            }
        }
    }
    else {
        for (int i = 0; i < n; i++) {
            sol[position] = i;
            if (valid(position)) {
                combinari(position + 1);
            }
        }
    }
}
int main() {
    freopen("elimin.in", "r", stdin);
    freopen("elimin.out", "w", stdout);

    int i,j;
    scanf("%d %d %d %d", &n, &m, &r, &c);

    int suma_totala = 0;

    for( i = 0; i < n; i++) {
        for(j = 0; j < m; j++) {
            scanf("%d", &a[i][j]);
            suma_totala += a[i][j];
            lin_sume[i] += a[i][j];
        }
    }

    for( j = 0; j < m; j++) {
        for( i = 0; i < n; i++) {
            col_sume[j] += a[i][j];
        }
    }
    combinari(0);
    suma_totala-=maxc;

    for (i = 0; i < r; i++) {
        for (j = 0; j < m; j++) {
            col_sume[j] -= a[linie_sterse[i]][j];
        }
    }
    sort(col_sume, col_sume+m);

    for (i=0;i<c;i++) {

         suma_totala-=col_sume[i];
    }

    printf("%d\n",suma_totala);

    return 0;
}