Pagini recente » Cod sursa (job #2588332) | Cod sursa (job #2657761) | Cod sursa (job #2784309) | Cod sursa (job #1035073) | Cod sursa (job #1002596)
#include<fstream>
#include<algorithm>
#include<cstdio>
#define LG 2500000
using namespace std;
int n,m,R,C,mat[610][610],sum,sol,sumC[7300],sumL[20],ind;
int lin[20],v[7300];
char buffer[LG];
inline void Citeste(int &x)
{
while(buffer[ind]<'0' || '9'<buffer[ind])
{
ind++;
if(ind==LG)
{
fread(buffer,1,LG,stdin);
ind=0;
}
}
x=0;
while('0'<=buffer[ind] && buffer[ind]<='9')
{
x=x*10+buffer[ind]-'0';
ind++;
if(ind==LG)
{
fread(buffer,1,LG,stdin);
ind=0;
}
}
}
inline void Verif()
{
int i,j,elim=0;
for(i=1;i<=R;i++)
elim+=sumL[lin[i]];
for(j=1;j<=m;j++)
{
v[j]=sumC[j];
for(i=1;i<=R;i++)
v[j]-=mat[lin[i]][j];
}
sort(v+1,v+m+1);
for(i=1;i<=C;i++)
elim+=v[i];
sol=max(sol,sum-elim);
}
inline void Back(int pas)
{
if(pas==R+1)
Verif();
else
{
int i;
for(i=lin[pas-1]+1;i<=n-R+pas;i++)
{
lin[pas]=i;
Back(pas+1);
}
}
}
int main()
{
int i,j;
freopen("elimin.in","r",stdin);
fread(buffer,1,LG,stdin);
Citeste(n); Citeste(m); Citeste(R); Citeste(C);
if(n<=m)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
Citeste(mat[i][j]);
sum+=mat[i][j];
sumC[j]+=mat[i][j];
sumL[i]+=mat[i][j];
}
}
}
else
{
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
Citeste(mat[j][i]);
sum+=mat[j][i];
sumC[i]+=mat[j][i];
sumL[j]+=mat[j][i];
}
}
swap(n,m);
swap(R,C);
}
Back(1);
freopen("elimin.out","w",stdout);
printf("%d\n",sol);
return 0;
}