Cod sursa(job #58206)

Utilizator goguGogu Marian gogu Data 4 mai 2007 17:31:10
Problema Elimin Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>


using namespace std;

int n, m, r, c, best;
int a[15][1024], s[1024], x[1024];

void back(int lev, int mai)
{
     int i, k=0;
     if (lev==n){
        if (mai) return;
        memcpy(x, s, 4*m);         
        nth_element(x, x+c, x+m);
        for (i=c; i<m; i++) k+=x[i];
        if (k>best) best=k;
        return;   
     }
     if (mai>=n-lev) return;
     for (i=0; i<m; i++) s[i]-=a[lev][i];
     for (i=lev+1; i<=n; i++)
         back(i, mai-1);
     for (i=0; i<m; i++) s[i]+=a[lev][i];
}

int main()
{
    freopen("elimin.in", "r", stdin);
    freopen("elimin.out", "w", stdout);
    int i,j,k;
    scanf("%d %d %d %d", &n, &m, &r, &c);
    if (m<n){
             k=n; n=m; m=k;
             k=r; r=c; c=k;
             for (i=0; i<m; i++)
                 for (j=0; j<n; j++)
                     scanf("%d", a[j]+i), s[i]+=a[j][i];
             } else {
             for (i=0; i<n; i++)
                 for (j=0; j<m; j++)
                     scanf("%d", a[i]+j), s[j]+=a[i][j];
             }
    for (i=0; i<=n-r; i++)
        back(i, r);
    printf("%d\n", best);
    return 0;
}