Cod sursa(job #1061847)

Utilizator krissu93FMI Tiugan Cristiana Elena krissu93 Data 20 decembrie 2013 13:03:28
Problema Elimin Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.56 kb
#include <fstream>
#include <algorithm>
#define max1 7305
#define max2 17


using namespace std;

int nrLinii, nrColoane, linii, coloane;
int joc[max1][max2],st[max2],  sumaLinii[max1], suma[max1];
int Suma = 0;

void getData(){

ifstream in("elimin.in");

in>>nrLinii>>nrColoane>>linii>>coloane;

if (nrLinii >= nrColoane)

    for (int counter1 = 1; counter1 <= nrLinii; counter1++)
        for (int counter2 = 1; counter2 <= nrColoane; counter2++)
            in>>joc[counter1][counter2], sumaLinii[counter1]+=joc[counter1][counter2];

else{
    for (int counter1 = 1; counter1 <= nrLinii; counter1++)

        for (int counter2 = 1; counter2 <= nrColoane; counter2++)
            in>>joc[counter2][counter1], sumaLinii[counter2]+= joc[counter2][counter1];

    swap(nrLinii,nrColoane);
    swap(linii,coloane);

    }
    in.close();
}

void solve(int st[]){


for (int counter = 1 ; counter <=nrLinii; ++counter ){
    suma[counter] = sumaLinii[counter];
    for (int counter2 = 1; counter2 <= coloane;++counter2)
        suma[counter] -= joc[counter][ st[ counter2 ]];
}

sort(suma+1, suma+1+nrLinii);

int sol = 0;
for (int counter = linii+1; counter <= nrLinii; ++ counter)
    sol+= suma[counter];

if (sol>Suma) Suma = sol;

}

void Back(int k){

if (k== coloane+1) {

    solve(st);
    return;
}

for (int counter = st[k-1]+1; counter<=nrColoane; ++counter)
 {
    st[k] = counter;
    Back(k+1);
 }
}

int main(){

getData();
Back(1);
ofstream out("elimin.out");
out<<Suma<<" ";
out.close();
return 0;


}