Pagini recente » Cod sursa (job #3261224) | Cod sursa (job #1142460) | Cod sursa (job #2456801) | Cod sursa (job #1927572) | Cod sursa (job #2313513)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin ("elimin.in");
ofstream cout ("elimin.out");
vector<vector<int>> a;
vector<int> sp;
int main(){
int n, m; cin >> n >> m;
int r, c; cin >> r >> c;
if (n < m){
a.resize(m + 1);
sp.resize(m);
}
else {
a.resize(n + 1);
sp.resize(n);
}
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++){
int x; cin >> x;
if (n < m) a[j].push_back(x);
else a[i].push_back(x);
}
if (n < m){
swap(n, m);
swap(r, c);
}
a[n].resize(m, 0);
for(int i = 0; i < n; i++){
a[i].push_back(0);
for(int j = 0; j < m; j++){
a[i][m] += a[i][j];
a[n][j] += a[i][j];
}
}
int ans = 0;
for(int i = 0; i < (1 << m); i++){
int cnt = 0;
for(int j = 0; j < m; j++)
cnt += (((1 << j) & i) != 0);
if (cnt != c) continue;
for(int ii = 0; ii < n; ii++)
sp[ii] = a[ii][m];
cnt = 0;
for(int j = 0; j < m; j++){
if (((1 << j) & i) != 0)
for(int ii = 0; ii < n; ii ++)
sp[ii] -= a[ii][j];
else cnt += a[n][j];
}
sort(sp.begin(), sp.end());
for(int ii = 0; ii < r; ii++)
cnt -= sp[ii];
ans = max(ans, cnt);
}
cout << ans << endl;
return 0;
}