Pagini recente » Cod sursa (job #1933347) | Cod sursa (job #1326750) | Cod sursa (job #1177884) | Cod sursa (job #2510909) | Cod sursa (job #2242347)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int n,m,r,c,total,summax;
int t[1001][1001],l[1001];
void find(int sum)
{
for(int j=1;j<=n;j++)l[j]=t[0][j];
sort(l+1,l+n+1);
for(int j=1;j<=c;j++)
sum-=l[j];
if(sum>summax)
summax=sum;
}
void back(int i,int last, int s)
{
if(i==r)
{
find(s);
return;
}
else
for(int j=last+1;j<=m;j++)
{
for(int k=1;k<=n;k++)
t[0][k]-=t[j][k];
back(i+1,j,s-t[j][0]);
for(int k=1;k<=n;k++)
t[0][k]+=t[j][k];
}
return;
}
int main()
{
fin>>m>>n>>r>>c;
if(m<=n)
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
fin>>t[i][j];
t[i][0]+=t[i][j];
t[0][j]+=t[i][j];
total+=t[i][j];
}
else{
for(int i=1; i<=m; i++)
for(int j=1; j<=n; j++)
{
fin>>t[i][j];
t[j][0]+=t[j][i];
t[0][i]+=t[j][i];
total+=t[j][i];
}
swap(m,n);
swap(r,c);
}
back(0,0,total);
fout<<summax;
return 0;
}