Pagini recente » Cod sursa (job #2816759) | Monitorul de evaluare | Cod sursa (job #1475591) | Cod sursa (job #3285098) | Cod sursa (job #2913567)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#pragma GCC optimize("Ofast")
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
const long long inf = 1e18;
int main(){
int n, m, r, c;
fin >> n >> m >> r >> c;
bool swaped = false;
if(n > m)
swap(n, m), swap(r, c), swaped = true;
vector <vector <int>> mat(n + 1, vector <int> (m + 1, 0));
if(!swaped){
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
fin >> mat[i][j];
}else{
for(int j = 1; j <= m; j++)
for(int i = 1; i <= n; i++)
fin >> mat[i][j];
}
long long ans = -inf;
for(int config = 0; config < (1 << n); config++)
if(__builtin_popcount(config) == r){
vector <long long> v;
for(int j = 1; j <= m; j++){
long long s = 0;
for(int i = 1; i <= n; i++)
if( (config & (1 << (i - 1))) == 0)
s += mat[i][j];
v.push_back(s);
}
sort(v.begin(), v.end());
long long sum = 0;
for(int i = (int)v.size() - 1; i >= c; i--)
sum += v[i];
ans = max(ans, sum);
}
fout << ans << '\n';
return 0;
}