Pagini recente » Rating Iordache Viorel (Viorell008) | Cod sursa (job #1237484) | Cod sursa (job #2215441) | Cod sursa (job #2575944) | Cod sursa (job #970786)
Cod sursa(job #970786)
#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(lin=0;lin<n;lin++)
if (num&(1<<lin))
{for(col=1;col<=m;col++)
sumc[col]-=a[lin+1][col];
sol-=sl[lin+1];
}
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;
}