Pagini recente » Cod sursa (job #501217) | Cod sursa (job #535076) | Cod sursa (job #2045865) | Cod sursa (job #213144) | Cod sursa (job #2313521)
#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(n + 1);
sp.resize(m);
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++){
int x; cin >> x;
a[i].push_back(x);
}
swap(n, m);
swap(r, c);
}
else {
a.resize(m + 1);
sp.resize(n);
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++){
int x; cin >> x;
a[j].push_back(x);
}
}
a[m].resize(n, 0);
for(int j = 0; j < m; j++){
a[j].push_back(0);
for(int i = 0; i < n; i++){
a[j][n] += a[j][i];
a[m][i] += a[j][i];
}
}
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[m][ii];
cnt = 0;
for(int j = 0; j < m; j++){
if (((1 << j) & i) != 0)
for(int ii = 0; ii < n; ii++)
sp[ii] -= a[j][ii];
else cnt += a[j][n];
}
sort(sp.begin(), sp.end());
for(int ii = 0; ii < r; ii++)
cnt -= sp[ii];
// cout << cnt << endl;
ans = max(ans, cnt);
}
cout << ans << endl;
return 0;
}