Pagini recente » Cod sursa (job #1889895) | Cod sursa (job #1700427) | Cod sursa (job #2000580) | Cod sursa (job #2221917) | Cod sursa (job #121638)
Cod sursa(job #121638)
#include <fstream.h>
#include <values.h>
ifstream fin("elimin.in");
ofstream fout("elimin.out");
long long max=MAXINT;
long n,m,l,c,auxc,auxl,lin[509],col[509],a[500][500],linopt[600],SLmin=24523642;
void citire()
{
fin>>n>>m>>l>>c;
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
fin>>a[i][j];
fin.close();
}
void suma()
{
long long S=0;
for (int k=0;k<m;k++)
if (col[k]==1)
for (int r=0;r<n;r++)
if (lin[r]==0)
S+=a[r][k];
if (S<max)
max=S;
}
void backc(int k)
{
if (k==m)
{
if (auxc==c)
suma();
return ;
}
if (auxc<c)
{
col[k]=1;
auxc++;
backc(k+1);
col[k]=0;
auxc--;
backc(k+1);
}
else
backc(k+1);
}
void sul()
{
long S=0;
for (int i=0;i<n;i++)
if (lin[i]==1)
for (int j=0;j<m;j++)
S+=a[i][j];
if (S<SLmin)
{
SLmin=S;
for (int k=0;k<n;k++)
linopt[k]=lin[k];
}
}
void backl(int k)
{
if (k==n)
{
if (auxl==l)
sul();
return ;
}
if (auxl<l)
{
lin[k]=1;
auxl++;
backl(k+1);
lin[k]=0;
auxl--;
backl(k+1);
}
else
{
backl(k+1);
}
}
int main()
{
citire();
backl(0);
for (int p=0;p<n;p++)
if (linopt[p]==1)
for (int r=0;r<m;r++)
a[p][r]=0;
backc(0);
long Su=0;
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
Su+=a[i][j];
Su-=max;
fout<<Su<<"\n";
fout.close();
return 0;
}