Pagini recente » Monitorul de evaluare | Cod sursa (job #2017080)
#include <fstream>
#include<algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int a[16][7295];
int l[7295];
int v[7295];
int n,m,r,c;
int maxim;
int solve(){
int s=0,j,i;
for(j=1;j<=m;j++){
v[j]=a[0][j];
for(i=1;i<=r;i++)
v[j]-=a[l[i]][j];
s+=v[j];
}
sort(v+1,v+m+1);
for(j=1;j<=c;j++)
s-=v[j];
return s;
}
void bkt(int k){
if(k==r+1){
int s=solve();
if(s>maxim)
maxim=s;
}else{
int i;
for(i=l[k-1]+1;i<=n;i++){
l[k]=i;
bkt(k+1);
}
}
}
int main(){
int i,j,aux;
fin >> n >> m >> r >> c;
if(n<=m)
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
fin >> a[i][j];
else{
aux=n;
n=m;
m=aux;
aux=r;
r=c;
c=aux;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
fin >> a[i][j];
}
for(j=1;j<=m;j++)
for(i=1;i<=n;i++)
a[0][j]+=a[i][j];
bkt(1);
fout << maxim;
return 0;
}