Cod sursa(job #378127)

Utilizator vladiiIonescu Vlad vladii Data 27 decembrie 2009 16:54:07
Problema Elimin Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <iostream>
#include <fstream>
using namespace std;

int e[600][600], sl[1000], s;

int main() {
    fstream f1, f2;
    int n, m, r, c, i, j, p, q, max=0;
    int semn[20], del[1000];
    f1.open("elimin.in", ios::in);
    f1>>n>>m>>r>>c;
    for(i=1; i<=n; i++) {
         for(j=1; j<=m; j++) {
              f1>>e[i][j];
         }
    }
    f1.close();
    if(n<m) {
         for(i=1; i<=n; i++) {
              for(j=1; j<=m; j++) {
                   if(j>i) {
                        swap(e[i][j], e[j][i]);
                   }
              }
         }
         swap(n, m); swap(r, c);
    }
    for(i=1; i<=n; i++) {
         for(j=1; j<=m; j++) {
              sl[i]+=e[i][j];
              //sc[j]+=e[i][j];
         }
    }
    for(i=1; i<(1<<m); i++) {
         q=i; p=0; s=0;
         for(j=1; j<=m; j++) {
              semn[j]=q%2; q=q/2;
              if(semn[j]==1) { p++; }
         }
         if(p==c) {
              for(j=1; j<=n; j++) {
                   del[j]=sl[j];
              }
              for(j=1; j<=m; j++) {
                   if(semn[j]==1) {
                        for(q=1; q<=n; q++) {
                             del[q]-=e[q][j];
                        }
                   }
                   else {
                        //s+=sc[j];
                   }
              }
              sort(del+1, del+n+1);
              //elimin primele r
              for(j=r+1; j<=n; j++) {
                   s+=del[j];
              }
              if(s>max) { max=s; }
         }
    }
    f2.open("elimin.out", ios::out);
    f2<<max<<endl;
    f2.close();     
    return 0;
}