Pagini recente » Cod sursa (job #3037506) | Cod sursa (job #2699553) | Cod sursa (job #34368) | Cod sursa (job #685388) | Cod sursa (job #2519685)
#include <bits/stdc++.h>
#define N 8000
using namespace std;
int a[N][N], sl[N], sc[N], save_bt[N], s, n, m, r, c, maxi, v[N];
void calcul()
{
int i, j, d[N], s1 = 0, s2 = 0;
for (i = 1; i <= m; i++)
d[i] = sc[i];
for (i = 1; i <= r; i++)
{
for (j = 1; j <= m; j++)
{
d[j] = d[j] - a[v[i]][j];
}
}
for (i = 1; i <= r; i++)
s1 += sl[v[i]];
sort(d + 1, d + m + 1);
for (i = 1; i <= c; i++)
s2 += d[i];
if(s - s1 - s2 > maxi)
maxi = s - s1 - s2;
}
void bt(int k)
{
int i;
for (i = v[k - 1] + 1; i <= n; i++)
{
v[k] = i;
if(k == r)
{
calcul();
}
else
{
bt(k + 1);
}
}
}
int main()
{
ifstream f("elimin.in");
ofstream g("elimin.out");
f>>n>>m>>r>>c;
int i, j;
if (n <= m)
{
for (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
{
f>>a[i][j];
}
}
} else {
for (i = 1; i <= n; i++) {
for (j = 1; j <= m; j++)
{
f>>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];
s += a[i][j];
}
bt(1);
g<<maxi;
return 0;
}