Pagini recente » Cod sursa (job #777503) | Cod sursa (job #3194190) | Borderou de evaluare (job #536475) | Cod sursa (job #1316644) | Cod sursa (job #2710275)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
long long s[8000];
int main()
{
int n, m, r, c;
fin >> n >> m >> r >> c;
vector<int> mat[8000], aux[8000];
for(int i = 1; i <= n; ++i){
mat[i].emplace_back(0), aux[i].emplace_back(0);
for(int j = 1; j <= m; ++j){
mat[i].emplace_back(0), aux[i].emplace_back(0);
int val;
fin >> val;
mat[i][j] = val;
}
}
int minn = min(n, m);
if(minn != m)
{
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
aux[j][i] = mat[i][j];
swap(n, m);
swap(r, c);
}
long long maxx = 0;
for(int msk = 0; msk < (1 << m); ++msk)
if(__builtin_popcount(msk) == c)
{
for(int i = 1; i <= n; ++i)
s[i] = 0;
long long sum = 0;
for(int j = 1; j <= m; ++j){
if((1 << (j - 1)) & msk)
continue;
for(int i = 1; i <= n; ++i)
s[i] += mat[i][j], sum += mat[i][j];
}
sort(s + 1, s + n + 1);
for(int i = 1; i <= r; ++i)
sum -= s[i];
maxx = max(maxx, sum);
}
fout << maxx << '\n';
return 0;
}