Pagini recente » Cod sursa (job #1928885) | Cod sursa (job #1291361) | Cod sursa (job #791512) | Cod sursa (job #706839) | Cod sursa (job #1240625)
#include <cstdio>
#include <algorithm>
using namespace std;
int a[20][4000];
int Sum[20];
bool used[20];
int Col[4000];
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;
}
if(swp){
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
scanf("%d",&a[m-j-1][i]), Sum[m-j-1] += a[m-j-1][i];
}
}
if(swp){
swap(n,m);
swap(r,c);
}
}
else{
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
scanf("%d",&a[i][j]),Sum[i] += a[i][j];
}
}
}
int Best = 0;
int N = 1 << n;
for(int i = 0; i <= N; i++){
int R = 0;
int S = 0;
int SZ = 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);
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[++SZ] = SS;
}
sort(Col+1,Col+SZ+1);
for(int k = 1; k <= c; k++)
S -= Col[k];
if(S > Best) Best = S;
}
}
printf("%d\n",Best);
}