Pagini recente » Cod sursa (job #2688192) | Cod sursa (job #563715) | Cod sursa (job #879334) | Cod sursa (job #1808933) | Cod sursa (job #1240618)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int a[20][4000];
int Sum[20];
bool used[20];
int main(){
freopen("elimin.in", "r", stdin);
freopen("elimin.out", "w", stdout);
int n,m,r,c;
bool swp = false;
scanf("%d%d%d%d",&n,&m,&r,&c);
if(n > m){
swp = true;
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(swp) scanf("%d",&a[m-j-1][i]), Sum[m-j-1] += a[m-j-1][i];
else scanf("%d",&a[i][j]),Sum[i] += a[i][j];
}
}
if(swp){
swap(n,m);
swap(r,c);
}
int Best = 0;
int N = 1 << n;
for(int i = 0; i <= N; i++){
int R = 0;
int S = 0;
for(int j = 0; j <= 15; j++){
used[j] = false;
if(i & (1 << j)){
R++;
S += Sum[j];
used[j] = true;
}
}
//printf("%d\n%d\n",S,R);
vector<int> Col;
if(R == n - r){
for(int j = 0; j < m; j++){
int SS = 0;
for(int k = 0; k < n; k++){
if(!used[k]) continue;
SS += a[k][j];
}
Col.push_back(SS);
}
sort(Col.begin(),Col.end());
for(int k = 0; k < c; k++)
S -= Col[k];
if(S > Best) Best = S;
}
}
printf("%d\n",Best);
}