Pagini recente » Cod sursa (job #80115) | Cod sursa (job #211715) | Cod sursa (job #71096) | Borderou de evaluare (job #156785) | Cod sursa (job #1105241)
#include<fstream>
#include<cstring>
#include<algorithm>
using namespace std;
const int Q = 751;
int N,M,R,C,a[Q][Q],s[Q],sc[Q],nr_biti[33000];
bool viz[Q];
int main(){
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int i,j,stot=0,sumsc=0,N2,x,p,k,sol=0;
fin>>N>>M>>R>>C;
if(M<=N)
for(i=1;i<=N;++i)
for(j=1;j<=M;++j)
{
fin>>a[i][j];
sc[j]+=a[i][j];
}
else{
for(i=1;i<=N;++i)
for(j=1;j<=M;++j)
{
fin>>a[j][i];
sc[i]+=a[j][i];
}
swap(N,M);
swap(R,C);
}
for(i=1;i<=M;++i)stot+=sc[i];
N2=(1<<M);
for(i=1;i<N2;++i)
{
nr_biti[i]=nr_biti[i>>1];
if(i&1)++nr_biti[i];
}
for(i=0;i<N2;++i)
if(nr_biti[i]==C)
{
x=i; p=1;
while(x){ if(x&1)viz[p]=1; ++p; x>>=1; }
for(j=1;j<=M;++j)
if(!viz[j])
{
for(k=1;k<=N;++k)
s[k]+=a[k][j];
}
else sumsc+=sc[j];
nth_element(s+1,s+R+1,s+N+1);
for(j=1;j<=R;++j)sumsc+=s[j];
if( stot-sumsc > sol )sol=stot-sumsc;
memset(s,0,sizeof(s));
memset(viz,0,sizeof(viz));
sumsc=0;
}
fout<<sol;
return 0;
}