Pagini recente » Cod sursa (job #2080112) | Cod sursa (job #291190) | Cod sursa (job #336688) | Cod sursa (job #1773628) | Cod sursa (job #717213)
Cod sursa(job #717213)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
using namespace std;
#define maxN 110
#define Tmax 210
#define f first
#define s second
#define MKP make_pair
#define PB push_back
#define inf (1 << 30)
int DP[maxN][maxN];
int vA[maxN], vB[maxN];
int N, L;
pair <int, int> sol[maxN][maxN];
vector <pair <int, int> > ans;
bool solve2 (int T)
{
for (int i = 0; i <= N; ++ i)
for (int j = 0; j <= L; ++ j) DP[i][j] = - inf;
DP[0][0] = 0;
for (int i = 1; i <= N; ++ i)
for (int a = 0; a <= L; ++ a)
for (int t = 0; t <= T; t += vA[i])
{
int nrA = t / vA[i];
int nrB = (T - t) / vB[i];
if (DP[i][a] < nrB + DP[i - 1][max (0, a - nrA)])
{
DP[i][a] = nrB + DP[i - 1][max (0, a - nrA)];
sol[i][a].f = nrA;
sol[i][a].s = nrB;
}
}
if (DP[N][L] >= L) return true;
return false;
}
bool solve (int T)
{
for (int i = 0; i <= N; ++ i)
for (int j = 0; j <= L; ++ j) DP[i][j] = - inf;
DP[0][0] = 0;
for (int i = 1; i <= N; ++ i)
for (int a = 0; a <= L; ++ a)
for (int t = 0; t <= T; t += vA[i])
{
int nrA = t / vA[i];
int nrB = (T - t) / vB[i];
if (DP[i][a] < nrB + DP[i - 1][max (0, a - nrA)]) DP[i][a] = nrB + DP[i - 1][max (0, a - nrA)];
}
if (DP[N][L] >= L) return true;
return false;
}
int bin_Search (int lo, int hi)
{
int res = hi + 1;
while (lo <= hi)
{
int mid = (lo + hi) / 2;
if (solve (mid))
{
res = min (res, mid);
hi = mid - 1;
}
else lo = mid + 1;
}
return res;
}
int main()
{
freopen ("lapte.in", "r", stdin);
freopen ("lapte.out", "w", stdout);
scanf ("%d %d", &N, &L);
for (int i = 1; i <= N; ++ i) scanf ("%d %d", &vA[i], &vB[i]);
int T = bin_Search (1, 105);
printf ("%d\n", T);
solve2 (T);
int last = L;
for (int i = N; i >= 1; -- i)
{
ans.PB ( MKP (sol[i][last].f, sol[i][last].s) );
last = last - sol[i][last].f;
}
for (int i = ans.size() - 1; i >= 0; -- i) printf ("%d %d \n", ans[i].f, ans[i].s);
return 0;
}