Pagini recente » Cod sursa (job #1558998) | Cod sursa (job #3278460) | Cod sursa (job #2586922) | Cod sursa (job #2698969) | Cod sursa (job #2575118)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int n,m,r,c,v[8000],nr,i,j,linie[8000],coloana[8000],smax,a[90][7501],b[8001],s;
void sol()
{
int i,j,b[8001],s=0;
for(i=1; i<=n; i++)
{
if(v[i]==1)
{
//fout<<i<<" ";
for(j=1;j<=m;j++)
{
coloana[j]-=a[i][j];
}
}
}
for(i=1;i<=m;i++)
{
b[i]=coloana[i];
}
sort(b+1,b+m+1);
for(i=m;i>=c+1;i--) s+=b[i];
//fout<<s;
if(s>smax)smax=s;
for(i=1; i<=n; i++)
{
if(v[i]==1)
{
for(j=1;j<=m;j++)
{
coloana[j]+=a[i][j];
}
}
}//fout<<'\n';
}
void back(int x)
{
nr++;
v[x]=1;
if(nr==r)
{
sol();
}
else
{
if(x<n) back(x+1);
}
v[x]=0;
nr--;
if(x<n)back(x+1);
}
int main()
{
fin>>n>>m>>r>>c;
if(n<m)
{
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
fin>>a[i][j];
linie[i]+=a[i][j];
coloana[j]+=a[i][j];
}
}
}
else
{
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
fin>>a[j][i];
linie[j]+=a[j][i];
coloana[i]+=a[j][i];
}
}
swap(n,m);
swap(r,c);
}
if(r==0)
{
for(i=1;i<=m;i++)
{
b[i]=coloana[i];
}
sort(b+1,b+m+1);
for(i=m;i>=c+1;i--) s+=b[i];
fout<<s;
}
else if(c==0)
{
for(i=1;i<=n;i++)
{
b[i]=linie[i];
}
sort(b+1,b+n+1);
for(i=n;i>=r+1;i--) s+=b[i];
fout<<s;
}
else
{
back(1);
fout<<smax;
}
return 0;
}