Pagini recente » Cod sursa (job #3303761) | Borderou de evaluare (job #3097636) | Cod sursa (job #3303760) | Cod sursa (job #3303770) | Cod sursa (job #3303768)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("elimin.in");
ofstream fout("elimin.out");
int main()
{
int n, m, r, c;
long long int maxSum = 0;
fin >> n >> m >> r >> c;
vector<vector<int>> mat;
if(n <= m)
{
mat = vector<vector<int>>(n + 9, vector<int>(m + 9));
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
fin >> mat[i][j];
}
}
else
{
mat = vector<vector<int>>(m + 9, vector<int>(n + 9));
vector<vector<int>> reverse(n + 9, vector<int>(m + 9));
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
fin >> reverse[i][j];
}
for(int i = 1; i <= m; i++)
{
for(int j = 1; j <= n; j++)
mat[i][j] = reverse[j][i];
}
swap(n, m);
swap(r, c);
}
if(n <= m)
{
for(int i = 0; i < (1 << n); i++)
{
if(__builtin_popcount(i) == r)
{
vector modified = mat;
for(int j = 0; j < n; j++)
if(i & (1 << j))
{
for(int j1 = 1; j1 <= m; j1++)
modified[j + 1][j1] = 0;
}
vector<pair<int ,int>> sumCol(m);
for(int j1 = 1; j1 <= m; j1++)
{
for(int i1 = 1; i1 <= n; i1++)
{
sumCol[j1 - 1].first += modified[i1][j1];
}
sumCol[j1 - 1].second = j1;
}
sort(sumCol.begin(), sumCol.end());
for(int i = 0; i < c; i++)
{
for(int i1 = 1; i1 <= n; i1++)
modified[i1][sumCol[i].second] = 0;
}
long long int sum = 0;
for(int i1 = 1; i1 <= n; i1++)
{
for(int j1 = 1; j1 <= m; j1++)
sum += modified[i1][j1];
}
maxSum = max(sum, maxSum);
}
}
}
fout << maxSum;
return 0;
}