Pagini recente » Monitorul de evaluare | Diferente pentru utilizator/funnystocky intre reviziile 196 si 42 | Istoria paginii fmi-no-stress-2012/solutii/fpwl | Monitorul de evaluare | Cod sursa (job #971574)
Cod sursa(job #971574)
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int mat[10000][20];
int main() {
int n, m;
int C, R;
freopen("elimin.in", "r", stdin);
freopen("elimin.out", "w", stdout);
cin>>n>>m>>R>>C;
if ( n > m )
for( int i = 1; i <= n; ++i)
for( int j = 1; j <= m; ++j)
cin>>mat[i][j];
else {
for( int i = 1; i <= n; ++i)
for( int j = 1; j <= m; ++j)
cin>>mat[j][i];
m = m ^ n ^ ( n = m);
C = R - C + ( R = C);
}
// numarul de coloane va fi mai mic
int optim = -1000000000;
for( int i = 0; i < ( 1<< m); ++i) {
int nr = 0;
for( int j = 0; j < m; ++j)
nr += !!((1<<j) & i);
if( nr != C)
continue;
vector <int> sum_lin(n, 0);
for( int j = 1; j <= n; ++j){
for( int k = 1; k <= m; ++k)
if( ((1<<(k-1)) & i) == 0)
sum_lin[j - 1] += mat[j][k];
}
nth_element (sum_lin.begin(), sum_lin.begin()+R, sum_lin.end());
int rez = 0;
for( int j = R; j < n; ++j)
rez += sum_lin[j];
if( rez > optim)
optim = rez;
}
cout<<optim;
return 0;
}