Pagini recente » Cod sursa (job #1659775) | Cod sursa (job #436986) | Cod sursa (job #1098847) | Cod sursa (job #2315901) | Cod sursa (job #119269)
Cod sursa(job #119269)
#include <fstream.h>
#include <values.h>
//using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
long long max=100000000;
long n,m,l,c,auxl,lin[1009],a[600][600];
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<n;k++)
if (lin[k]==1)
for (int r=0;r<m;r++)
S+=a[r][k];
if (S<max)
max=S;
}
void backc(int k)
{
if (k==m)
{
if (auxl==l)
suma();
return ;
}
if (auxl<l)
{
lin[k]=1;
auxl++;
backc(k+1);
lin[k]=0;
auxl--;
backc(k+1);
}
else
backc(k+1);
}
void sortare()
{
for (int i=0;i<m;i++)
for (int j=0;j<n;j++)
a[n][i]+=a[j][i];
short ok=1,p=m;
while (ok)
{
ok=0;
p--;
for (int y=0;y<p;y++)
if (a[n][y]>a[n][y+1])
{
for (int pp=0;pp<n+1;pp++)
{
int aux=a[pp][y];
a[pp][y]=a[pp][y+1];
a[pp][y+1]=aux;
}
ok=1;
}
}
}
void eliminare()
{
for (int i=0;i<c;i++)
for (int j=0;j<n;j++)
a[i][j]=0;
}
int main()
{
citire();
sortare();
eliminare();
backc(0);
long 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;
}