Pagini recente » Cod sursa (job #649197) | Cod sursa (job #332957) | Cod sursa (job #1047070) | Cod sursa (job #1898886) | Cod sursa (job #1022018)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#define maxn 730
using namespace std;
int m,n,r,c;
int a[maxn][maxn], aa[maxn][maxn];
int smax=0;
int viz[maxn];
int sol[maxn];
int sum[maxn];
ifstream in("elimin.in");
ofstream out("elimin.out");
void restaurare()
{
for (int i=1; i<=m; i++)
for (int j=1; j<=n; j++)
aa[i][j]=a[i][j];
}
void verificare()
{
int k=1;
for (int i=0; i<r; i++)
for(int j=1; j<=n; j++)
aa[sol[i]][j]=0;
for (int i=1; i<=m; i++)
{
for(int j=1; j<=n; j++)
cout<<aa[i][j]<<" ";
cout<<endl;
}
cout<<endl;
for (int j=1; j<=n; j++)
{
int s=0;
for (int i=1; i<=m; i++)
s+=aa[i][j];
sum[k]=s;
k++;
}
for(int i=0; i<k; i++)
cout<<sum[i]<<" ";
cout<<endl;
for (int i=1; i<k-1; i++)
for (int j=i+1; j<=k-1; j++)
if (sum[i]<sum[j])
{
int aux=sum[i];
sum[i]=sum[j];
sum[j]=aux;
}
for (int i=1;i<k;i++)
cout<<sum[i]<<" ";
cout<<endl;
int s=0;
for (int i=1; i<k-c; i++)
s+=sum[i];
if (smax<s) smax=s;
restaurare();
}
void back(int k)
{
if (k==r)
{
for (int i=0; i<r; i++)
out<<sol[i]<<" ";
out<<endl;
verificare();
}
else if (k<n)
{
for(int i=1; i<=m; i++)
{
if ((!viz[i]) && (k==0))
{
sol[k]=i;
viz[i]=1;
back(k+1);
viz[i]--;
}
else if ((!viz[i]) && (sol[k-1]<i))
{
viz[i]=1;
sol[k]=i;
back(k+1);
viz[i]=0;
}
}
}
}
int main()
{
in>>m>>n>>r>>c;
for (int i=1; i<=m; i++)
for (int j=1; j<=n; j++)
{
in>>a[i][j];
}
restaurare();
fill(viz, viz+m+1,0 );
back(0);
out<<smax;
return 0;
}