Pagini recente » Cod sursa (job #416907) | Cod sursa (job #2894138) | Cod sursa (job #281706) | Cod sursa (job #2625437) | Cod sursa (job #2539534)
//#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("elimin.in");
ofstream cout("elimin.out");
int mn(int a,int b){
if(a<b)
return a;
return b;
}
int vect[8000],summ=0;
int put[30],n,m,f[8000],v[8000][8000],a,b,minim=999999;
void bctn(){
for(int i=0;i<put[n];i++){
int stare=i,cnt=0;
for(int j=1;j<=n;j++)
f[j]=0;
for(int j=1;j<=m;j++)
vect[j]=0;
long long suma=0,contor=0;
for(int j=1;j<=n;j++){
f[j]=stare%2;
contor+=f[j];
stare/=2;
}
if(contor!=a)
continue;
for(int j=1;j<=n;j++){
if(f[j]==1){
for(int k=1;k<=m;k++){
suma+=v[j][k];
}
}
}
for(int j=1;j<=n;j++){
if(f[j]==0)
for(int k=1;k<=m;k++){
vect[k]+=v[j][k];
}
}
/*for(int k=1;k<=m;k++){
int sum=0;
for(int j=1;j<=n;j++){
if(f[j]==0){
sum+=v[j][k];
}
}
vect[k]=sum;
}
*/
//cout<<suma<<"\n";
sort(vect+1,vect+m+1);
for(int j=1;j<=b;j++){
suma+=vect[j];
}
minim=mn(minim,suma);
//cout<<suma<<"\n";
/**for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
s[i][j]=s[]
}
}
*/
}
cout<<summ-minim;
}
void bctm(){
for(int i=0;i<put[m];i++){
int stare=i,cnt=0;
for(int j=1;j<=m;j++)
f[j]=0;
for(int j=1;j<=n;j++)
vect[j]=0;
long long suma=0,contor=0;
for(int j=1;j<=m;j++){
f[j]=stare%2;
stare/=2;
contor+=f[j];
}
if(contor!=b){
continue;
}
for(int k=1;k<=n;k++){
for(int j=1;j<=m;j++){
if(f[j]==1){
suma+=v[k][j];
}
}
}
/*for(int j=1;j<=m;j++){
if(f[j]==1){
for(int k=1;k<=n;k++){
suma+=v[k][j];
}
}
}
*/
for(int k=1;k<=n;k++){
int sum=0;
for(int j=1;j<=m;j++){
if(f[j]==0){
sum+=v[k][j];
}
}
vect[k]=sum;
}
//cout<<suma<<"\n";
sort(vect+1,vect+n+1);
for(int j=1;j<=a;j++){
suma+=vect[j];
}
minim=mn(minim,suma);
//cout<<suma<<"\n";
/**for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
s[i][j]=s[]
}
}
*/
}
cout<<summ-minim;
}
int main()
{
cin>>n>>m>>a>>b;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>v[i][j];
summ+=v[i][j];
}
}
put[0]=1;
for(int j=1;j<=20;j++){
put[j]=put[j-1]*2;
}
if(n<=m){
bctn();
}
else{
bctm();
}
return 0;
}