Pagini recente » Cod sursa (job #1278483) | Cod sursa (job #170942) | Cod sursa (job #894630) | Cod sursa (job #1252344) | Cod sursa (job #2541925)
//#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,sn[8000],sm[8000];
int ve[8000];
void bctn(){
for(int i=0;i<put[n];i++){
int stare=i,cnt=0;
long long suma=0;
int contor=0;
for(int j=1;j<=n;j++){
if(stare%2==1){
ve[++contor]=j;
}
stare/=2;
}
if(contor!=a)
continue;
for(int j=1;j<=a;j++){
suma+=sn[ve[j]];
}
for(int j=1;j<=m;j++){
vect[j]=sm[j];
}
for(int j=1;j<=a;j++){
for(int k=1;k<=m;k++){
vect[k]-=v[ve[j]][k];
}
}
sort(vect+1,vect+m+1);
for(int j=1;j<=b;j++){
suma+=vect[j];
}
minim=mn(minim,suma);
}
cout<<summ-minim;
}
int main()
{
cin>>n>>m>>a>>b;
if(n<=m){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>v[i][j];
sn[i]+=v[i][j];
sm[j]+=v[i][j];
summ+=v[i][j];
}
}
}
else{
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>v[j][i];
}
}
swap(n,m);
swap(a,b);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
sn[i]+=v[i][j];
sm[j]+=v[i][j];
summ+=v[i][j];
}
}
}
put[0]=1;
for(int j=1;j<=20;j++){
put[j]=put[j-1]*2;
}
bctn();
return 0;
}