Pagini recente » Cod sursa (job #2736570) | Cod sursa (job #1152059) | Cod sursa (job #2299586) | Cod sursa (job #3125711) | Cod sursa (job #808348)
Cod sursa(job #808348)
#include <fstream>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
using namespace std;
ifstream fi ("lapte.in");
ofstream fo ("lapte.out");
const int dim = 101;
int N, L;
int VA[dim], VB[dim], CA[dim], CB[dim], M[dim];
int bestm, bestCA[dim], bestCB[dim];
void cit ()
{
fi >> N >> L;
for (int i = 1; i <= N; i++)
{
fi >> VA[i] >> VB[i];
}
bestm = dim;
}
void back (int a, int b, int m, int x)
// a, b lapte baut
// m minute scurse
// x individul curent
{
if (x == N + 1)
{
x = 1;
m++;
}
if (a >= L && b >= L)
{
for (int i = 1; i <= N; i++)
m = max (m, M[i]);
if (bestm > m)
{
bestm = m;
for (int i = 1; i <= N; i++)
{
bestCA[i] = CA[i];
bestCB[i] = CB[i];
}
}
return;
}
if (M[x] == m)
{
if (m < bestm && a < L)
{
M[x] = m + VA[x];
CA[x]++;
back (a + 1, b, m, x + 1);
CA[x]--;
M[x] = m;
}
if (m < bestm && b < L)
{
M[x] = m + VB[x];
CB[x]++;
back (a, b + 1, m, x + 1);
CB[x]--;
M[x] = m;
}
}
else
{
if (m < bestm)
{
back (a, b, m, x + 1);
}
}
}
void afi ()
{
fo << bestm << '\n';
for (int i = 1; i <= N; i++)
{
fo << bestCA[i] << ' ' << bestCB[i] << '\n';
}
}
int main ()
{
cit ();
back (0, 0, 0, 1);
afi ();
return 0;
}