Pagini recente » Cod sursa (job #1047469) | Cod sursa (job #2607579) | Cod sursa (job #1334278) | Cod sursa (job #56956) | Cod sursa (job #1888028)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int n,m,i,j,SUM,sum,max1=-1,R,C,nr,N;
short a[100][100];
void BK(int R,int C,int n,int m,int SUM,int sum)
{ int i=0,j=0;
nr++;
if(R>0 && n>0)
{
for(i=n;i>=1;i--)
{
sum=SUM;
for(j=1;j<=m;j++)
{a[0][j]+=a[i][j];
SUM-=a[i][j];}
BK(R-1,C,i-1,m,SUM,sum);
SUM=sum;
for(j=1;j<=m;j++)
{a[0][j]=a[0][j]-a[i][j];}
}
}
if(C>0 && m>0)
{
for(j=m;j>=1;j--)
{
sum=SUM;
for(i=1;i<=N;i++)
SUM=SUM-a[i][j];
SUM+=a[0][j];
BK(R,C-1,n,j-1,SUM,sum);
SUM=sum;
}
}
if(R==0 && C==0)
{
if(max1<SUM)
max1=SUM;}
}
int main()
{
fin>>n>>m>>R>>C;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{fin>>a[i][j];
SUM+=a[i][j];}
sum=SUM;
N=n;
BK(R,C,n,m,SUM,sum);
fout<<"max1="<<max1<<" nr="<<nr;
return 0;
}