Cod sursa(job #654052)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 29 decembrie 2011 14:25:56
Problema Elimin Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("elimin.in");
ofstream g("elimin.out");

int n,m,r,c,i,j,v[1000][1000],a[200],sumx=0;

void readN() {
    for (int i=1;i<=m;i++)
        for (int j=1;j<=n;j++)
            f >> v[i][j];
}
void readR() {
    for (int i=1;i<=m;i++)
        for (int j=1;j<=n;j++)
            f >> v[j][m-i+1];
    swap(m,n);
    swap(r,c);
}
void check() {
    int sum[1000],i,j;
    for (i=1;i<=m;i++) sum[i]=v[i][0];
    for (i=1;i<=c;i++)
        for (j=1;j<=m;j++)
            sum[j]-=v[j][a[i]];
    sort(sum+1,sum+m+1);
    int s=0;
    for (i=r+1;i<=m;i++) s+=sum[i];
    sumx=max(s,sumx);
}
void combinari(int l) {
    int i;
    if (l<=c) {
        for (i=a[l-1]+1;i<=n-c+l;i++) {
            a[l]=i;
            combinari(l+1);
        }
    }
    else
        check();
}

int main () {
    f >> m >> n >> r >> c;
    if (m<n) readR();
        else readN();
    for (i=1;i<=m;i++)
        for (j=1;j<=n;j++) {
            v[i][0]+=v[i][j];
            v[0][j]+=v[i][j];
        }
    combinari(1);
    g << sumx << '\n';
    f.close();g.close();
    return 0;
}