Pagini recente » Cod sursa (job #703432) | Cod sursa (job #372269) | Cod sursa (job #2102640) | Cod sursa (job #2308085) | Cod sursa (job #2198380)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("elimin.in");
ofstream out("elimin.out");
int n, m, r, c;// se da o matrice de n pe m si trebuie sa elimin exact r linii si c coloane
int matr[1000][1000];//matricea contine numere naturale
int linie[1000],sumCol[1000];
int sumMax, nrLin;
void citire(){
in >> n >> m >> r >> c;
if(n <= m){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
in >> matr[i][j];
}
}
}else{
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
in >> matr[j][i];
}
}
}
}
void quickSort(int st, int dr){
int i = st, j = dr, pivot = (st + dr)/2;
while(i <= j){
while(i <= dr && sumCol[i] < sumCol[pivot]){
i++;
}
while (j >= st && sumCol[j] > sumCol[pivot]){
j--;
}
if(i <= j){
int temp = sumCol[i];
sumCol[i] = sumCol[j];
sumCol[j] = temp;
i++;
j--;
}
}
if(i < dr){
quickSort(i, dr);
}
if(j > st){
quickSort(st, j);
}
}
void sumaColoane(){
int sumTemp = 0;
for(int i = 1; i <= m; i++){
sumCol[i] = 0;
}
for(int i = 1; i <= nrLin; i++){
for(int j = 1; j <= m ;j++){
sumCol[j] = sumCol[j] + matr[linie[i]][j];
}
}
//quickSort(1, m);
sort(sumCol + 1, sumCol + m + 1);
for(int i = m; i > c; i--){
sumTemp = sumTemp + sumCol[i];
}
if(sumTemp > sumMax){
sumMax = sumTemp;
}
}
void bktLinii(int varf){
for(int i = linie[varf - 1] + 1; i <= n; i++){
linie[varf] = i;
if(varf <= nrLin){
if(varf == nrLin){
sumaColoane();
}else{
bktLinii(varf + 1);
}
}
}
}
int main() {
citire();
nrLin = n - r;
bktLinii(1);
out << sumMax;
return 0;
}