Pagini recente » Cod sursa (job #2981414) | Cod sursa (job #421767) | Cod sursa (job #2233621) | Cod sursa (job #926415) | Cod sursa (job #2310219)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
int N,M,a[5000][20],R,C,rezultat,aux[5052],x[30],i,j;
void Citire()
{
fin>>N>>M>>R>>C;
if(M>N)
{
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
{
fin>>a[j][i];
}
swap(M,N);
swap(C,R);
}
else
{
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
fin>>a[i][j];
}
for(i=1;i<=M;i++)
for(j=1;j<=N;j++)
{
a[j][0]+=a[j][i];
}
}
void Solve()
{
int ok=0;
for(i=1;i<=N;i++)
{
aux[i]=a[i][0];
}
sort(aux+1,aux+N+1);
for(i=R+1;i<=N;i++)
{
ok+=aux[i];
}
rezultat=maxim(ok,rezultat);
}
void Backtracking(int k, int t)
{
if(k>C)
{
Solve();
}
else
{
for(i=t+1;i<=M;i++)
{
x[k]=i;
for(j=1;j<=N;j++)
{
a[j][0]-=a[j][i];
}
Backtracking(k+1,i);
for(j=1;j<=N;j++)
{
a[j][0]+=a[j][i];
}
}
}
}
int main()
{
Citire();
Backtracking(1,0);
fout<<rezultat;
fin.close();
fout.close();
return 0;
}