Pagini recente » Cod sursa (job #1550217) | Cod sursa (job #604315) | Cod sursa (job #2828796) | Cod sursa (job #1903350) | Cod sursa (job #266467)
Cod sursa(job #266467)
#include <fstream>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
#define NMAX 102
struct bautor {int a,b;};
int A[NMAX][NMAX], N, L, C[NMAX][NMAX], D[NMAX][NMAX];
bautor B[NMAX], soli[NMAX];
int Verifica(int t)
{
int i, j, k;
for (i = 1; i <= N; i++)
for (j = 0; j <= L; j++)
for (A[i][j] = -1, k = 0; k <= j && A[i-1][k] != -1; k++)
if (t - (j - k) >= 0)
if (A[i-1][k] + ( (t - (j - k) * B[i].a) / B[i].b ) > A[i][j] )
A[i][j] = A[i - 1][ k ] + ((t - (j - k) * B[ i ].a) / B[ i ].b), C[i][j] = k;
if (A[N][L] >= L)
{
return 1;
for(i=1; i<=N;i++)
for(j=1;j<=L;j++)
D[i][j] = C[i][j];
}
else
return 0;
}
int main()
{
int i, j, st, end, m, sol;
fin >>N >>L;
for (i = 1; i <= N; i++)
fin >>B[i].a >>B[i].b;
st = 1, end = 100;
for (i = 1; i <= L; i++)
A[0][i] = -1;
while (st <= end)
{
m = (st + end) / 2;
if (Verifica(m))
{
sol = m;
end = m - 1;
}
else
st = m + 1;
}
fout <<sol<<'\n';
for (i = N, j = L; i >= 1;j = D[i][j], i--)
soli[i].a = j - D[i][j], soli[i].b = (L - soli[i].a) / B[i].b;
for (i = 1; i <= N; i++)
fout <<soli[i].a <<' ' <<soli[i].b <<'\n';
fout.close();
return 0;
}