Pagini recente » Cod sursa (job #2044153) | Cod sursa (job #3167702) | Cod sursa (job #1928845) | Cod sursa (job #2065566) | Cod sursa (job #8317)
Cod sursa(job #8317)
#include <fstream.h>
ifstream f1("elimin.in");
ofstream f2("elimin.out");
int main(){
int n,m,i,j,a[16][1000],r,c,q[16],nr,x[1000],poz,aux;
long long l[16],p[1000],sum,s,min,s1[1000],max=0,mincp,minc;
f1>>n;f1>>m;
f1>>r>>c;
if (n>m){
aux=n;
n=m;
m=aux;
sum=0;
for (i=1;i<=m;i++){
for (j=1;j<=n;j++){
f1>>a[n-j+1][i];
sum+=a[n-j+1][i];
}
}
}
else{
sum=0;
for (i=1;i<=n;i++){
for (j=1;j<=m;j++){
f1>>a[i][j];
sum+=a[i][j];
}
}
}
min=sum;
for (i=1;i<=n;i++){
l[i]=0;
for (j=1;j<=m;j++){
l[i]+=a[i][j];
}
}
for (j=1;j<=m;j++){
p[j]=0;
for (i=1;i<=n;i++){
p[j]+=a[i][j];
}
}
for (i=0;i<=n;i++)q[i]=0;
max=0;
while (q[0]==0){
nr=0;
for (i=1;i<=n;i++){
if (q[i])nr++;
}
if (nr==r){
s=0;
for (i=1;i<=n;i++)if (q[i])s=s+l[i];
if (s<=min){
min=s;
for (j=1;j<=m;j++){
s1[j]=0;
for (i=1;i<=n;i++)if (q[i])s1[j]=s1[j]+a[i][j];
}
for (j=1;j<=m;j++)x[j]=1;
mincp=0;
for (i=1;i<=c;i++){
minc=sum;
for (j=1;j<=m;j++)if (x[j]&&p[j]-s1[j]<minc){minc=p[j]-s1[j];poz=j;}
x[poz]=0;
mincp+=minc;
}
if (sum-min-mincp>max)max=sum-min-mincp;
}
}
q[n]++;
for (i=n;i>=1;i--)if (q[i]==2){q[i]=0;q[i-1]++;}
}
f2<<max<<'\n';
f1.close();
f2.close();
return 0;
}