Pagini recente » Cod sursa (job #2132088) | Cod sursa (job #1063488) | Cod sursa (job #923706) | Cod sursa (job #88480) | Cod sursa (job #1265022)
#include<cstdio>
#include<algorithm>
using namespace std;
int n,i,j,p,q,a[7300],s,r,c,sol,m;
struct nod
{
int x;
int y;
}sl[7305],sc[7305];
int S[7305];
int cmp(const nod A,const nod B)
{
return A.x<B.x;
}
int cmp1(const nod A,const nod B)
{
return A.x-a[n*(A.y-1)+A.y]<B.x-a[n*(B.y-1)+B.y];
}
int cmp2(const nod A,const nod B)
{
return A.x-a[m*(A.y-1)+A.y]<B.x-a[n*(B.y-1)+B.y];
}
int poz[7305];
int main()
{
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%d %d %d %d",&n,&m,&r,&c);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
scanf("%d",&a[++p]);
sl[i].x+=a[p];
sc[j].x+=a[p];
sl[i].y=i;
sc[j].y=j;
s+=a[p];
}
if ((r==0)&&(c==0)) {printf("%d",s); return 0;}
sort(sl+1,sl+n+1,cmp); sort(sc+1,sc+m+1,cmp);
if (r==0)
{
for (j=1;j<=c;j++) s=s-sc[j].x;
printf("%d",s);
return 0;
}
if (c==0)
{
for (j=1;j<=r;j++) s=s-sl[j].x;
printf("%d",s);
return 0;
}
for (i=1;i<=n;i++)
{
sort(sc+1,sc+m+1,cmp1); S[i]=sl[i].x;
for (j=1;j<=c;j++) S[i]+=sc[j].x-a[n*(sc[j].y-1)+sc[j].y];
}
sort(S+1,S+n+1); sol=s;
for (i=1;i<=r;i++) sol=sol-S[i];
for (j=1;j<=m;j++)
{
sort(sl+1,sl+m+1,cmp1); S[j]=sc[j].x;
for (i=1;i<=r;i++) S[j]+=sl[i].x-a[(sl[j].y-1)*n+sc[j].y];
}
sort(S+1,S+m+1);
for (i=1;i<=r;i++) s=s-S[i];
printf("%d",max(sol,s));
return 0;
}