Pagini recente » Cod sursa (job #1018026) | Cod sursa (job #3346233) | Cod sursa (job #250062) | Cod sursa (job #3342776) | Cod sursa (job #3303773)
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
ifstream fin ("elimin.in");
ofstream fout("elimin.out");
int main()
{
unsigned int n, m, r, c;
unsigned int maxSum = 0, initSum = 0;
fin >> n >> m >> r >> c;
vector<vector<unsigned int>> mat;
if(n <= m)
{
mat = vector<vector<unsigned int>>(n + 9, vector<unsigned int>(m + 9));
for(unsigned int i = 1; i <= n; i++)
{
for(unsigned int j = 1; j <= m; j++)
fin >> mat[i][j];
}
}
else
{
mat = vector<vector<unsigned int>>(m + 9, vector<unsigned int>(n + 9));
vector<vector<unsigned int>> reverse(n + 9, vector<unsigned int>(m + 9));
for(unsigned int i = 1; i <= n; i++)
{
for(unsigned int j = 1; j <= m; j++)
fin >> reverse[i][j];
}
for(unsigned int i = 1; i <= m; i++)
{
for(unsigned int j = 1; j <= n; j++)
mat[i][j] = reverse[j][i];
}
swap(n, m);
swap(r, c);
}
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
initSum += mat[i][j];
if(n <= m)
{
for(unsigned int i = 0; i < (1 << n); i++)
{
if(__builtin_popcount(i) == r)
{
unsigned int sum = initSum;
vector modified = mat;
for(unsigned int j = 0; j < n; j++)
if(i & (1 << j))
{
for(unsigned int j1 = 1; j1 <= m; j1++)
{
sum -= modified[j + 1][j1];
modified[j + 1][j1] = 0;
}
}
vector<pair<unsigned int ,unsigned int>> sumCol(m);
for(unsigned int j1 = 1; j1 <= m; j1++)
{
for(unsigned int i1 = 1; i1 <= n; i1++)
{
sumCol[j1 - 1].first += modified[i1][j1];
}
sumCol[j1 - 1].second = j1;
}
sort(sumCol.begin(), sumCol.end());
for(unsigned int i = 0; i < c; i++)
{
for(unsigned int i1 = 1; i1 <= n; i1++)
{
sum -= modified[i1][sumCol[i].second];
modified[i1][sumCol[i].second] = 0;
}
}
maxSum = max(sum, maxSum);
}
}
}
fout << maxSum;
return 0;
}