Pagini recente » Cod sursa (job #2444941) | Cod sursa (job #1660985) | Cod sursa (job #2621868) | Cod sursa (job #501424) | Cod sursa (job #1758431)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("elimin.in","r");
FILE *g=fopen("elimin.out","w");
long long N,M,R,C,s,maxim,TS,i,j;
long long c[7300];
long long r[7300];
long long V[7300];
long long S[7300];
void eval()
{
int sum[7300];
for(int i=1;i<=M;i++)
{
sum[i]=c[i];
for(int j=1;j<=R;j++)
{
sum[i]-=S[V[j]*M+i-M];
}
}
sort(sum+1,sum+1+M);
int tmps=s;
for(int i=1;i<=C;i++)
tmps+=sum[i];
if(TS-tmps>maxim)
maxim=TS-tmps;
}
void getVec(int nr,int left)
{
if(nr<=R)
{
for(int i=left;i<=N-R+nr;i++)
{
V[nr]=i;
s+=r[i];
getVec(nr+1,i+1);
s-=r[i];
}
}
else
{
eval();
}
}
int main()
{
fscanf(f,"%lld %lld %lld %lld",&N,&M,&R,&C);
if(N<M)
{
for(i=1;i<=N;i++)
{
for(j=1;j<=M;j++)
{
fscanf(f,"%lld",&S[(i-1)*M+j]);
TS+=S[(i-1)*M+j];
c[j]+=S[(i-1)*M+j];
r[i]+=S[(i-1)*M+j];
}
}
}
else
{
for(i=1;i<=N;i++)
{
for(j=1;j<=M;j++)
{
fscanf(f,"%lld",&S[(j-1)*N+i]);
TS+=S[(j-1)*N+i];
c[i]+=S[(j-1)*N+i];
r[j]+=S[(j-1)*N+i];
}
}
swap(N,M);
swap(R,C);
}
getVec(1,1);
fprintf(g,"%lld",maxim);
fclose(f);
fclose(g);
return 0;
}