Pagini recente » Cod sursa (job #1584195) | Cod sursa (job #1793203) | Cod sursa (job #3248978) | Cod sursa (job #2257608) | Cod sursa (job #2717187)
#include <bits/stdc++.h>
#define a first
#define b second
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
bool test(vector<pair<int, int> > vals, int t, int l)
{
vector<int> bag(l + 1, -1), newbag(l + 1, -1);
bag[0] = newbag[0] = 0;
for (auto it:vals) {
int vala = t, valb = 0;
while (vala >= 0 && valb <= t) {
for (int i = l; i >= 0; --i) {
if (bag[i] != -1 && i + vala / it.a <= l) {
newbag[i + vala / it.a] = max(newbag[i + vala / it.a], bag[i] + valb / it.b);
}
}
int difa, difb;
difa = vala - (vala % it.a ? vala / it.a * it.a : (vala / it.a - 1) * it.a);
difb = (valb / it.b + 1) * it.b - valb;
int dif = min(difa, difb);
vala -= dif;
valb += dif;
}
bag = newbag;
}
return (bag[l] >= l);
}
int main()
{
int n, l;
fin >> n >> l;
vector<pair<int, int> > vals(n);
for (int i = 0; i < n; ++i) {
fin >> vals[i].a >> vals[i].b;
}
int mn = 1, mx = 100, mid;
while (mn < mx) {
mid = (mn + mx) / 2;
bool is = test(vals, mid, l);
if (is) {
mx = mid - 1;
} else {
mn = mid + 1;
}
}
fout << mx + 1;
return 0;
}