Cod sursa(job #970784)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 7 iulie 2013 20:00:23
Problema Elimin Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
vector <int> a[7300];
vector <int> b[7300];
int n,m,r,c,sl[7300],sc[7300],suml[7300],sumc[7300],sumtot,sol,mn;
void Read()
{ int i,j,el,lin,col;
    f>>n>>m>>r>>c;
  if (n<=m)
    for(i=1;i<=n;i++)
    { a[i].push_back(0);
     for(j=1;j<=m;j++)
    {f>>el;
     a[i].push_back(el);}
    }
    else
    { for(i=1;i<=n;i++)
      { b[i].push_back(0);
        for(j=1;j<=m;j++)
       {f>>el;
        b[i].push_back(el);
        }
      }

      for(i=1;i<=m;i++)
      for(j=1;j<=n+1;j++)
       a[i].push_back(0);

      for(j=m;j>=1;j--)
      for(i=1;i<=n;i++)
      a[m-j+1][i]=b[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 Back()
{ int i,j,k=1<<n,bit,lin,col,num;
  mn=-2147000000;

  for(num=0;num<k;num++)
   {bit=0;
    for(j=0;j<n;j++) if (num&(1<<j)) bit++;
   if (bit==r)
    { cout<<"hello";
        sol=sumtot;
     for(i=1;i<=n;i++) suml[i]=sl[i];
     for(i=1;i<=m;i++) sumc[i]=sc[i];

    for(bit=0;bit<n;bit++)
     if (num&(1<<bit))
       { for(col=1;col<=m;col++)
          sumc[col]-=a[lin+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;
    }



   }

}
int main()
{ Read();
  Back();
  g<<mn;
    return 0;
}