Pagini recente » Cod sursa (job #983906) | Cod sursa (job #1744725) | Cod sursa (job #2113221) | Cod sursa (job #1757210) | Cod sursa (job #1724512)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define MAXN 7294
#define INF 1000000000
using namespace std;
vector <int> mat[MAXN+1];
int vf[MAXN+1];
int sum[MAXN+1];
int main(){
FILE*fi,*fout;
int i,j,n,m,l,c,s,s1,maxim,p2,x,con;
fi=fopen("elimin.in" ,"r");
fout=fopen("elimin.out" ,"w");
fscanf(fi,"%d%d%d%d" ,&n,&m,&l,&c);
s=0;
for(i=1;i<=n;i++){
mat[i].push_back(0);
for(j=1;j<=m;j++){
fscanf(fi,"%d" ,&x);
mat[i].push_back(x);
s+=mat[i][j];
}
}
maxim=0;
if(n<=m){
for(p2=0;p2<(1<<n);p2++){
con=0;
x=p2;
s1=0;
for(j=1;j<=n;j++){
if(x&1){
con++;
vf[j]=1;
for(i=1;i<=m;i++)
s1+=mat[j][i];
}
x>>=1;
}
if(con==l){
for(i=1;i<=m;i++){
sum[i]=0;
for(j=1;j<=n;j++)
if(vf[j]==0)
sum[i]+=mat[j][i];
}
std::sort(sum+1,sum+m+1);
for(i=1;i<=c;i++)
s1+=sum[i];
if(s-s1>maxim)
maxim=s-s1;
}
memset(vf,0,sizeof(vf));
}
}
else{
for(p2=0;p2<(1<<m);p2++){
con=0;
x=p2;
s1=0;
for(j=1;j<=m;j++){
if(x&1){
con++;
vf[j]=1;
for(i=1;i<=n;i++)
s1+=mat[i][j];
}
x>>=1;
}
if(con==c){
for(i=1;i<=n;i++){
sum[i]=0;
for(j=1;j<=m;j++)
if(vf[j]==0)
sum[i]+=mat[i][j];
}
std::sort(sum+1,sum+n+1);
for(i=1;i<=l;i++)
s1+=sum[i];
if(s-s1>maxim)
maxim=s-s1;
}
memset(vf,0,sizeof(vf));
}
}
fprintf(fout,"%d" ,maxim);
fclose(fi);
fclose(fout);
return 0;
}