Pagini recente » Cod sursa (job #2005000) | Cod sursa (job #1069487) | Cod sursa (job #3191380) | Cod sursa (job #415947) | Cod sursa (job #189068)
Cod sursa(job #189068)
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#include <algorithm>
#define Nmax 522
using namespace std;
long long bestS,Suma;
int v[Nmax];
int m,n,c,r;
int a[Nmax][Nmax];
int sol[20];
char cit[10000],*s;
void scan()
{
freopen("elimin.in", "r", stdin);
freopen("elimin.out", "w", stdout);
scanf("%d%d%d%d\n", &m,&n,&r,&c);
}
void makeS()
{
long long Si=Suma;
for(int i=1;i<=m;++i)
v[i]=a[i][0];
for(int i=1;i<=c;++i)
{
Si-=a[0][sol[i]];
for(int j=1;j<=m;++j)
v[j]-=a[j][sol[i]];
}
sort(v+1,v+m+1);
for(int i=1;i<=r;++i)
Si-=v[i];
if(Si>bestS)
bestS=Si;
}
void back(int x)
{
if(x==c)
makeS();
else
for(int i=sol[x]+1;i<=n;++i)
{
sol[x+1]=i;
back(x+1);
}
}
void solve()
{
if(m<n)
{
int aux;
aux=r; r=c; c=aux;
for(int i=1;i<=m;++i)
{
s=0;
gets(cit);
s=cit;
for(int j=1;j<=n;++j)
{
a[j][m+1-i]=atol(s);
s=strchr(s,' ');
s++;
Suma+=a[j][m+1-i];
a[j][0]+=a[j][m+1-i];
a[0][m+1-i]+=a[j][m+1-i];
}
}
aux=n; n=m; m=aux;
}
else
{
for(int i=1;i<=m;++i)
{
s=0;
gets(cit);
s=cit;
for(int j=1;j<=n;++j)
{
a[i][j]=atol(s);
s=strchr(s,' ');
s++;
Suma+=a[i][j];
a[i][0]+=a[i][j];
a[0][j]+=a[i][j];
}
}
}
back(0);
printf("%lld\n",bestS);
}
int main()
{
scan();
solve();
return 0;
}