Cod sursa(job #1940901)

Utilizator alex273Groza Alexandru alex273 Data 26 martie 2017 21:10:08
Problema Elimin Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("elimin.in"); ofstream g("elimin.out");
int suma_maxima=INT_MIN;
int m,n,r,c,v_i[7500],v1_i[7500],v_j[7500],v1_j[7500],a[7500][7500];


void write1(int k){
    for(int j=1;j<=m;j++) v1_j[j]=1;
for(int i=1;i<=k;i++) v1_j[v_j[i]]=0;
//for(int i=1;i<=n;i++) g<<v1_i[i]<<" ";g<<"#1\n";
   //for(int i=1;i<=n;i++) g<<v1_j[i]<<" ";g<<"  *2\n";
int suma=0;
for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++) suma+=a[i][j]*v1_i[i]*v1_j[j];
suma_maxima=max(suma_maxima,suma);
}

void bkt1(int k){
for(int i=v_j[k-1]+1;i<=n;i++)
                                      {
                                         v_j[k]=i;
                                         if (k==c) write1(k);
                                         bkt1(k+1);
                                      }

}

void write(int k){
    for(int j=1;j<=n;j++) v1_i[j]=1;
for(int i=1;i<=k;i++) v1_i[v_i[i]]=0;
  // for(int i=1;i<=n;i++) g<<v1_i[i]<<" ";g<<"#1\n";
  if (c!=0)
bkt1(1); else {for (int i=1;i<=max(m,n);i++) v1_j[i]=1; write1(k);}
}

void bkt(int k){
for(int i=v_i[k-1]+1;i<=n;i++)
                           {
                               v_i[k]=i;
                               if (k==r) write(k);
                               bkt(k+1);
                           }
}

int main(){
f>>n>>m>>r>>c;
for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++) f>>a[i][j];
//v1_i[1]=1;v1_i[2]=1;v1_i[3]=0; v1_j[1]=1;v1_j[2]=0;v1_j[3]=1;
//suma_maxima=0;
     //for(int i=1;i<=n;i++)
    //for(int j=1;j<=m;j++) suma_maxima+=a[i][j]*v1_i[i]*v1_j[j];
if (r!=0) bkt(1); else {  for (int i=1;i<=max(m,n);i++) v1_i[i]=1;  bkt1(1); }
g<<suma_maxima;
return 0;
}