Pagini recente » Cod sursa (job #780262) | Monitorul de evaluare | Cod sursa (job #1498169) | Cod sursa (job #1994100) | Cod sursa (job #2398619)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n, m, r, c;
int a[16][10000];
int calc_de_unde_incep(int r)
{
int p=1, s=0;
for(int i=1;i<=r;i++){
s+=p;
p=p*2;
}
return s;
}
int suma[500];
int testez(int i){
int s=0;
int ii=1;
int pana_la=(1<<n);
for(int j=1; j<pana_la; j<<=1,ii++)
if((j&i)==0){
for(int k=1; k<=m; k++){
s+=a[ii][k];
suma[k]+=a[ii][k];
}
}
sort(suma+1,suma+m+1);
for(int j=1; j<=c;j++)
s-=suma[j];
for(int i=1; i<=m; i++)
suma[i]=0;
return s;
}
int vmax=-1;
void generez(int x){
int pana_la=0;
int p=1;
for(int i=1; i<=n;i++)
{
pana_la+=p;
p*=2;
}
for(int i=x; i<=pana_la; i++){
int nr1=0;
for(int j=1; j<=i; j<<=1)
if((j&i)!=0)
nr1++;
if(nr1==r)
vmax=max(testez(i),vmax);
}
}
int main() {
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%d %d %d %d", &n, &m, &r, &c);
if(n<=m){
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++)
scanf("%d ",&a[i][j]);
}
generez(calc_de_unde_incep(r));
}
else{
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++)
scanf("%d ",&a[j][i]);
}
swap(n,m);
generez(calc_de_unde_incep(r));
}
printf("%d",vmax);
return 0;
}