Pagini recente » Cod sursa (job #1446013) | Cod sursa (job #700050) | Cod sursa (job #2631779) | Cod sursa (job #50863) | Cod sursa (job #1002446)
#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<<'\n';
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+n+1);
int i=1;
//out<<sc2[1]<<' '<<sc2[2]<<endl;
//out<<sol[1]<<' '<<soll<<endl;
for(; i<=c; ++i)
soll-=sc2[i];
if(soll>mx)
mx=soll;
//out<<sol[1]<<' '<<soll<<endl;
}
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();
}
/*else
{
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)
{
//tiparestesol(r);
solution();
}
else
{
sol[k]=sol[k-1];
while(sol[k]<n-r+k)
{
++sol[k];
BT(k+1);
}
}
}
int main()
{
read();
/*if(r)
BT(1);
else if(c)
{
soll=sumtot;
greedy();
}
if(!r && !c)
{
mx=sumtot;
write();
}
//write();*/
BT(1);
write();
in.close();
out.close();
return 0;
}