Pagini recente » Cod sursa (job #2251838) | Cod sursa (job #1669482) | Cod sursa (job #1225038) | Cod sursa (job #613959) | Cod sursa (job #1002457)
#include <fstream>
#include <algorithm>
#include <vector>
#define IN "elimin.in"
#define OUT "elimin.out"
using namespace std;
ifstream in(IN);
ofstream out(OUT);
int r, c, sol[7300], a[7300][7300], sc[7300], sl[7300], sumtot, sc2[7300], mx, soll, n, m;
inline void write()
{
out<<mx<<'\n';
}
inline void read()
{
in>>n>>m>>r>>c;
int i, j;
if(n<=m)
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
in>>a[i][j];
else
{
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
in>>a[j][i];
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];
}
}
inline void greedy()
{
sort(sc2+1, sc2+m+1);
int i=1;
for(; i<=c; ++i)
soll-=sc2[i];
if(soll>mx)
mx=soll;
}
inline void solution()
{
int i=1, j=1;
soll=sumtot;
for(; i<=m; ++i)
sc2[i]=sc[i];
for(i=1; i<=r; ++i)
{
for(; j<=m; ++j)
sc2[j]-=a[sol[i]][j];
soll-=sl[sol[i]];
}
if(c)
{
//greedy();
nth_element(sc2+1,sc2+c+1,sc2+m+1);
for(i=1; i<=c; ++i)
soll-=sc2[i];
}
if(soll>mx)
mx=soll;
}
inline void tiparestesol(int lim)
{
for(int i=1; i<=lim; ++i)
out<<sol[i]<<' ';
out<<'\n';
}
inline void BT(int k)//combinari de n luate cate r
{
if(k==r+1)
solution();
else
{
sol[k]=sol[k-1];
while(sol[k]<n)
{
++sol[k];
BT(k+1);
}
}
}
int main()
{
read();
BT(1);
write();
in.close();
out.close();
return 0;
}