Pagini recente » Cod sursa (job #778372) | Cod sursa (job #1992339) | Cod sursa (job #685398) | Cod sursa (job #1081133) | Cod sursa (job #970810)
Cod sursa(job #970810)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
int a[20][500];
int n,m,r,c,sl[7300],sc[7300],suml[7300],sumc[7300],sumtot,sol,mn,nbit=0;
bool e[20];
void Read()
{ int i,j,el,lin,col;
f>>n>>m>>r>>c;
if (n<=m)
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>a[i][j];
else
{ for(j=1;j<=n;j++)
for(i=1;i<=m;i++)
f>>a[i][j];
swap(n,m);
swap(r,c);
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{sl[i]+=a[i][j];
sc[j]+=a[i][j];
sumtot+=a[i][j];
}
}
void PrelSol()
{ int i,j,bit,lin,col,num;
sol=sumtot;
for(i=1;i<=m;i++) sumc[i]=sc[i];
for(bit=0;bit<n;bit++)
if (e[bit])
{for(col=1;col<=m;col++)
sumc[col]-=a[bit+1][col];
sol-=sl[bit+1];
}
if (c)
{ sort(sumc+1,sumc+m+1);
for(col=1;col<=c;col++) sol-=sumc[col]; }
if (sol>mn) mn=sol;
}
void Back(int k)
{ int i;
if (k==n) {if (nbit==r) PrelSol();}
else
{ if (nbit<r) {nbit++; e[k]=1; Back(k+1); nbit--;}
e[k]=0; Back(k+1);
}
}
int main()
{ Read();
Back(0);
g<<mn;
return 0;
}